diff options
author | Karl Berry <karl@freefriends.org> | 2013-10-13 22:58:36 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2013-10-13 22:58:36 +0000 |
commit | 7ce7d7350645fbb6f9ba0858e4fc77f66a9855c2 (patch) | |
tree | b829a908e485d04e6d1d418b9a16586c81a078d6 | |
parent | a30b096e3bdab5f734e588afbaa6295665436c19 (diff) |
texdraw non-update
git-svn-id: svn://tug.org/texlive/trunk@31894 c570f23f-e606-0410-a88d-b1316a301751
30 files changed, 8122 insertions, 7772 deletions
diff --git a/Master/texmf-dist/doc/info/texdraw.info b/Master/texmf-dist/doc/info/texdraw.info index 2458b4f3b33..51eb61b36f7 100644 --- a/Master/texmf-dist/doc/info/texdraw.info +++ b/Master/texmf-dist/doc/info/texdraw.info @@ -1,16 +1,16 @@ -This is texdraw, produced by makeinfo version 4.5 from texdraw.texi. +This is texdraw, produced by makeinfo version 5.1 from texdraw.texi. - This file documents TeXdraw, a system for producing PostScript -drawings from TeX. +This file documents TeXdraw, a system for producing PostScript drawings +from TeX. - Copyright (C) 1993-95 Peter Kabal + Copyright (C) 1993-95 Peter Kabal - Permission is granted to make and distribute verbatim copies of this + Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. - Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided that the + Permission is granted to copy and distribute modified versions of +this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. @@ -20,10 +20,10 @@ File: texdraw, Node: Top, Next: Introduction, Prev: (dir), Up: (dir) TeXdraw ******* - TeXdraw is a collection of macros that allow drawings to be created -from _within_ TeX. +TeXdraw is a collection of macros that allow drawings to be created from +_within_ TeX. - This is edition 2.0 of the TeXdraw documentation. + This is edition 2.0 of the TeXdraw documentation. * Menu: @@ -41,7 +41,7 @@ Indices * Concept Index:: * Command Index:: - --- The Detailed Node Listing --- + -- The Detailed Node Listing -- Introduction @@ -108,35 +108,35 @@ Concept Index File: texdraw, Node: Introduction, Next: TeXdraw Commands, Prev: Top, Up: Top -Introduction -************ +1 Introduction +************** - TeX is a powerful typesetting program which allows for complex text +TeX is a powerful typesetting program which allows for complex text layouts but by itself lacks a general graphics capability. However, when coupled with an appropriate printer driver program, external graphics files can be inserted into the printed document. In this mode, -TeX is instructed to leave space for a drawing. The drawing is -inserted by the printer driver program. The TeXdraw macros described -here generate the external graphics file from within TeX and generate -the instructions to the the print driver program to position the -graphics at the appropriate position on the page. +TeX is instructed to leave space for a drawing. The drawing is inserted +by the printer driver program. The TeXdraw macros described here +generate the external graphics file from within TeX and generate the +instructions to the the print driver program to position the graphics at +the appropriate position on the page. - TeXdraw consists of a set of TeX macros that create line drawings and + TeXdraw consists of a set of TeX macros that create line drawings and other figures. The drawing primitives include solid lines, patterned lines, Bezier curves, circles and arrows. Other commands allow for the filling of a region with a gray level. The drawing commands generate PostScript code. This limits TeXdraw to systems which use PostScript printers. TeXdraw also provides commands to position TeX text, -including mathematics, on the drawing. The final drawing, with text -and graphics, can be positioned on the page like any other TeX box. +including mathematics, on the drawing. The final drawing, with text and +graphics, can be positioned on the page like any other TeX box. - The basic TeXdraw macros for TeX use the `\special' syntax recognized -by the printer driver program `dvips'. However, when invoked as a + The basic TeXdraw macros for TeX use the '\special' syntax recognized +by the printer driver program 'dvips'. However, when invoked as a LaTeX2e package, the TeXdraw macros can be used with any of the -PostScript printer driver programs supported by the standard `graphics' +PostScript printer driver programs supported by the standard 'graphics' package for LaTeX2e. - The basic TeXdraw macros provide only simple drawing commands. + The basic TeXdraw macros provide only simple drawing commands. However, TeXdraw provides a drawing segment environment which allows parameter changes and coordinate scaling changes to be kept local to the drawing segment. This facility, together with TeX's macro capabilities @@ -150,25 +150,25 @@ more complex graphics entities from simpler elements. File: texdraw, Node: Distribution, Up: Introduction -Distribution information -======================== +1.1 Distribution information +============================ - The TeXdraw routines are provided free of charge without warranty of -any kind. Note that the TeXdraw routines are copyrighted. They may be +The TeXdraw routines are provided free of charge without warranty of any +kind. Note that the TeXdraw routines are copyrighted. They may be distributed freely provided that the recipients also acquire the right -to distribute them freely. The notices to this effect must be -preserved when the source files are distributed. +to distribute them freely. The notices to this effect must be preserved +when the source files are distributed. File: texdraw, Node: TeXdraw Commands, Next: Drawing Segments and Scaling, Prev: Introduction, Up: Top -Using the TeXdraw Commands -************************** +2 Using the TeXdraw Commands +**************************** - The main TeXdraw macros (commands) are defined in the file -`texdraw.tex'. These macros may be used directly in TeX. The file -`texdraw.sty' provides an interface for use with LaTeX2e. The -following sections describe the basic commands for TeXdraw. +The main TeXdraw macros (commands) are defined in the file +'texdraw.tex'. These macros may be used directly in TeX. The file +'texdraw.sty' provides an interface for use with LaTeX2e. The following +sections describe the basic commands for TeXdraw. * Menu: @@ -185,29 +185,29 @@ following sections describe the basic commands for TeXdraw. File: texdraw, Node: Accessing TeXdraw, Next: Command syntax, Up: TeXdraw Commands -Accessing TeXdraw -================= +2.1 Accessing TeXdraw +===================== - The form of the user command to run the TeX program depends on which +The form of the user command to run the TeX program depends on which version of TeX is being used, and which other macro packages are preloaded as format files. Typically, installations have at least two versions of TeX -- plain TeX which includes basic typesetting macros -(usually invoked as `tex') and LaTeX2e which includes the LaTeX2e -typesetting macros (usually invoked as `latex'). An older version of +(usually invoked as 'tex') and LaTeX2e which includes the LaTeX2e +typesetting macros (usually invoked as 'latex'). An older version of LaTeX, version 2.09, may also be available. The TeXdraw macros can be used with plain TeX and with either version of LaTeX. - For use with plain TeX, the user must read in the TeXdraw macros from -the file `texdraw.tex'. + For use with plain TeX, the user must read in the TeXdraw macros from +the file 'texdraw.tex'. \input texdraw % Read in the TeXdraw macros ... \btexdraw ... % TeXdraw commands to generate a drawing \etexdraw - For use with LaTeX version 2.09, the user reads in the TeXdraw macros -from the file `texdraw.tex' and optionally defines the -`\begin{texdraw}' / `\end{texdraw}' environment. + For use with LaTeX version 2.09, the user reads in the TeXdraw macros +from the file 'texdraw.tex' and optionally defines the '\begin{texdraw}' +/ '\end{texdraw}' environment. \documentstyle[11pt]{article} % Article style with the 11pt size options ... \input texdraw % Read in the TeXdraw macros @@ -219,14 +219,14 @@ from the file `texdraw.tex' and optionally defines the ... \end{document} - For use with LaTeX2e, the user must load the `texdraw' package (file -`texdraw.sty'). This package file defines the `\begin{texdraw}' / -`\end{texdraw}' environment, brings in the standard `graphics' package -and reads in the file `texdraw.tex' containing the definitions of the + For use with LaTeX2e, the user must load the 'texdraw' package (file +'texdraw.sty'). This package file defines the '\begin{texdraw}' / +'\end{texdraw}' environment, brings in the standard 'graphics' package +and reads in the file 'texdraw.tex' containing the definitions of the TeXdraw macros. \documentclass[11pt]{article} % Article class with the 11pt size option \usepackage{texdraw} % TeXdraw commands - + \begin{document} ... \begin{texdraw} @@ -235,272 +235,253 @@ TeXdraw macros. ... \end{document} - As the TeXdraw commands are processed by TeX, an intermediate + As the TeXdraw commands are processed by TeX, an intermediate PostScript file is generated. The intermediate PostScript has a name of -the form `NAME.ps1'. The name part is derived from the name of the -main TeX file being processed. If more than one drawing is produced, -the digit in the file name extension is incremented.(1) +the form 'NAME.ps1'. The name part is derived from the name of the main +TeX file being processed. If more than one drawing is produced, the +digit in the file name extension is incremented.(1) - The TeXdraw commands to produce a drawing are inserted between -`\btexdraw' and `\etexdraw' commands, or for LaTeX, between -`\begin{texdraw}' and `\end{texdraw}' commands. This results in a TeX + The TeXdraw commands to produce a drawing are inserted between +'\btexdraw' and '\etexdraw' commands, or for LaTeX, between +'\begin{texdraw}' and '\end{texdraw}' commands. This results in a TeX box of appropriate size containing the drawing generated by the TeXdraw commands. The TeXdraw box can be positioned in a document like any other TeX box. - The `\centertexdraw{...}' macro centers the box generated by TeXdraw. + The '\centertexdraw{...}' macro centers the box generated by TeXdraw. The vertical space taken up is equal to the vertical size of the -drawing. The `\centertexdraw' macro is normally used in vertical mode -(between paragraphs). A `\par' command (a blank line will do also) -before a `\centertexdraw' command will terminate horizontal mode and +drawing. The '\centertexdraw' macro is normally used in vertical mode +(between paragraphs). A '\par' command (a blank line will do also) +before a '\centertexdraw' command will terminate horizontal mode and return to vertical mode. For LaTeX, a structured equivalent to the -`\centertexdraw{...}' command is shown below. +'\centertexdraw{...}' command is shown below. \begin{center} \begin{texdraw} ... \end{texdraw} \end{center} - The `\everytexdraw' command can be used to define a set of TeXdraw + The '\everytexdraw' command can be used to define a set of TeXdraw commands that will be executed at the beginning of every TeXdraw -drawing. It is invoked as `\everytexdraw{ ...}', with the desired +drawing. It is invoked as '\everytexdraw{ ...}', with the desired TeXdraw commands as arguments. -`\btexdraw' +'\btexdraw' Start a TeXdraw drawing. The drawing is terminated with an - `\etexdraw' command. - -`\etexdraw' - End a TeXdraw drawing started with a `\btexdraw' command. The + '\etexdraw' command. +'\etexdraw' + End a TeXdraw drawing started with a '\btexdraw' command. The resulting TeXdraw drawing is placed in a box with height equal to the height of the drawing and width equal to the width of the drawing. The depth of the box is zero. - -`\begin{texdraw}' +'\begin{texdraw}' Start a TeXdraw drawing. The drawing is terminated with an - `\end{texdraw}' command. This command is for use with LaTeX. - -`\end{texdraw}' - End a TeXdraw drawing started with a `\begin{texdraw}' command. + '\end{texdraw}' command. This command is for use with LaTeX. +'\end{texdraw}' + End a TeXdraw drawing started with a '\begin{texdraw}' command. The resulting TeXdraw drawing is placed in a box with height equal to the height of the drawing and width equal to the width of the drawing. The depth of the box is zero. This command is for use with LaTeX. - -`\centertexdraw{ ... }' +'\centertexdraw{ ... }' Center a TeXdraw box horizontally. The argument contains TeXdraw - commands. The resulting box has the horizontal size `\hsize' and + commands. The resulting box has the horizontal size '\hsize' and height equal to the height of the drawing. - -`\everytexdraw{ ... }' +'\everytexdraw{ ... }' Specify TeXdraw commands to be executed at the beginning of every TeXdraw drawing. - ---------- Footnotes ---------- + ---------- Footnotes ---------- - (1) After the ninth PostScript file, the name of the intermediate -PostScript file takes the form `NAME.p10', with the number increasing + (1) After the ninth PostScript file, the name of the intermediate +PostScript file takes the form 'NAME.p10', with the number increasing from 10 with each file. File: texdraw, Node: Command syntax, Next: TeXdraw coordinates, Prev: Accessing TeXdraw, Up: TeXdraw Commands -Command syntax -============== +2.2 Command syntax +================== - Generally TeXdraw commands that take a single argument need a +Generally TeXdraw commands that take a single argument need a terminating blank or newline after the argument. Arguments that are self-delimiting, such as coordinates within parentheses and text within braces, do not need the terminating blank. However, even when not needed by the defining syntax of the command, blanks following command arguments are allowed and ignored within the TeXdraw environment. - On entering the TeXdraw environment, TeX is in internal vertical mode -(vertical mode inside a `\vbox'). In this mode, spaces can be placed + On entering the TeXdraw environment, TeX is in internal vertical mode +(vertical mode inside a '\vbox'). In this mode, spaces can be placed freely between commands. However, any other extraneous input that generates output that is not part of the TeXdraw environment is disallowed. - Blank lines are interpreted as paragraph breaks, equivalent to a -`\par' command. The TeXdraw macro `\centertexdraw' is defined with the -`\long' attribute to allow `\par' commands and blank lines to be -interspersed between TeXdraw commands. The `\btexdraw' and `\etexdraw' -commands also allow `\par' command and blank lines to be included. + Blank lines are interpreted as paragraph breaks, equivalent to a +'\par' command. The TeXdraw macro '\centertexdraw' is defined with the +'\long' attribute to allow '\par' commands and blank lines to be +interspersed between TeXdraw commands. The '\btexdraw' and '\etexdraw' +commands also allow '\par' command and blank lines to be included. File: texdraw, Node: TeXdraw coordinates, Next: Coordinate specification, Prev: Command syntax, Up: TeXdraw Commands -TeXdraw coordinates -=================== +2.3 TeXdraw coordinates +======================= - The TeXdraw coordinate system has increasing X to the right and +The TeXdraw coordinate system has increasing X to the right and increasing Y upward. The coordinates (without the unit) are floating point numbers. Integer values can be written without a decimal point. The size of the drawing is determined by the maximum excursions of the coordinates specified in TeXdraw commands. - Consider the following example of TeXdraw commands to draw a simple + Consider the following example of TeXdraw commands to draw a simple figure. \centertexdraw{ \drawdim cm \linewd 0.02 \move(2 2) \lvec(3 3) \lvec(2 4) \lvec(1 3) \lvec(2 2) \textref h:C v:C \htext(2 3){$\sum \rho_n$} } -This drawing uses units of centimetres, with a line width of 0.02 -cm. The X coordinate ranges between 1 and 3 while the Y coordinate -ranges between 2 and 4. When included into a document, the size of the -drawing is 2 cm by 2 cm. The drawing is placed in a TeX box, with the -lower lefthand corner of the box corresponding to TeXdraw coordinate -`(1 2)' and the upper righthand corner at `(3 4)'. The -`\centertexdraw' command centers the drawing horizontally. The -`\textref' command controls the centering of the text. The text in -this drawing is centered (both horizontally and vertically) at the -coordinate `(2 3)'. + This drawing uses units of centimetres, with a line width of 0.02 cm. +The X coordinate ranges between 1 and 3 while the Y coordinate ranges +between 2 and 4. When included into a document, the size of the drawing +is 2 cm by 2 cm. The drawing is placed in a TeX box, with the lower +lefthand corner of the box corresponding to TeXdraw coordinate '(1 2)' +and the upper righthand corner at '(3 4)'. The '\centertexdraw' command +centers the drawing horizontally. The '\textref' command controls the +centering of the text. The text in this drawing is centered (both +horizontally and vertically) at the coordinate '(2 3)'. File: texdraw, Node: Coordinate specification, Next: Line vectors, Prev: TeXdraw coordinates, Up: TeXdraw Commands -Coordinate specification -======================== +2.4 Coordinate specification +============================ - Coordinates are specified within parentheses, with blanks (but no -comma) between the values. Leading blanks and trailing blanks are -permitted within the parentheses. The coordinates refer to units, -which are specified by the `\drawdim' command. The default is inches, -but any valid TeX dimension unit can be specified. Symbolic -specification of saved coordinate values will be discused later (*note -Saving positions::). +Coordinates are specified within parentheses, with blanks (but no comma) +between the values. Leading blanks and trailing blanks are permitted +within the parentheses. The coordinates refer to units, which are +specified by the '\drawdim' command. The default is inches, but any +valid TeX dimension unit can be specified. Symbolic specification of +saved coordinate values will be discused later (*note Saving +positions::). -`\drawdim DIM' +'\drawdim DIM' Set the units to DIM. The argument DIM can be any valid TeX - dimension unit. The units are used to interpret coordinate - values. Examples of valid units: `cm', `mm', `in', `pt', and `bp'. + dimension unit. The units are used to interpret coordinate values. + Examples of valid units: 'cm', 'mm', 'in', 'pt', and 'bp'. - Examples of coordinate and scaling specifications: -`\drawdim {cm} \move(2 2)' + Examples of coordinate and scaling specifications: +'\drawdim {cm} \move(2 2)' Set the units to centimetres, move to a position 2 cm to the right and 2 cm up from the origin of the drawing coordinate system. - -`\drawdim bp' +'\drawdim bp' Set the units to big points. - -`\lvec ( 2.2 +5.5) \lvec(2.3 -2) \lvec(2.2 5.4 )' +'\lvec ( 2.2 +5.5) \lvec(2.3 -2) \lvec(2.2 5.4 )' Examples of acceptable coordinate specifications. File: texdraw, Node: Line vectors, Next: TeX text, Prev: Coordinate specification, Up: TeXdraw Commands -Line vectors -============ +2.5 Line vectors +================ - TeXdraw implements moves, line vectors and arrow vectors. There are +TeXdraw implements moves, line vectors and arrow vectors. There are both absolute and relative motion versions of these vector commands. TeXdraw maintains a current position. Lines are drawn from the current position to a new coordinate, with the new coordinate becoming the new current position. An explicit move can be used to establish a new -current position. The position `(0 0)' is used if there is no move to +current position. The position '(0 0)' is used if there is no move to an initial current position. - The `\move' and `\rmove' commands establish a new current position -without drawing a line. The `\lvec' and `\rlvec' commands draw a line + The '\move' and '\rmove' commands establish a new current position +without drawing a line. The '\lvec' and '\rlvec' commands draw a line from the current position to a new position, which then becomes the new -current position. The `\avec' and `\ravec' commands draw a line with -an arrowhead from the current position to a new coordinate, which then +current position. The '\avec' and '\ravec' commands draw a line with an +arrowhead from the current position to a new coordinate, which then becomes the new current position. The tip of the arrow is at the new current position. The direction of the arrow follows the direction of the line. Since this direction is undefined for zero length vectors, -these are not allowed for `\avec' or `\ravec'. Zero length arrow -vectors will generate a PostScript print error: `undefinedresult'. For +these are not allowed for '\avec' or '\ravec'. Zero length arrow +vectors will generate a PostScript print error: 'undefinedresult'. For any non-zero length vector, the full size arrowhead is drawn, even if that arrowhead is longer than the line length. - The absolute motion versions of these commands specify the coordinate + The absolute motion versions of these commands specify the coordinate of the final position. -`\move (X Y)' - Move to coordinate `(X Y)'. The new current position is `(X Y)'. - -`\lvec (X Y)' - Draw a line from the current position to coordinate `(X Y)'. The - new current position is `(X Y)'. - -`\avec (X Y)' - Draw a line with an arrowhead from the current position to `(X - Y)'. The new current position is `(X Y)'. The arrowhead is - aligned with the line, with the tip at `(X Y)'. - - The relative motion versions of these commands interpret the +'\move (X Y)' + Move to coordinate '(X Y)'. The new current position is '(X Y)'. +'\lvec (X Y)' + Draw a line from the current position to coordinate '(X Y)'. The + new current position is '(X Y)'. +'\avec (X Y)' + Draw a line with an arrowhead from the current position to '(X Y)'. + The new current position is '(X Y)'. The arrowhead is aligned with + the line, with the tip at '(X Y)'. + + The relative motion versions of these commands interpret the coordinates as displacements relative to the current position. Given -the displacements `(DX DY)' as a parameter, each of the relative motion +the displacements '(DX DY)' as a parameter, each of the relative motion commands moves DX units in the X direction and DY units in the Y direction. -`\rmove (DX DY)' +'\rmove (DX DY)' Move from the current position, DX units in the X direction and DY units in the Y direction. The final position becomes the new current position. - -`\rlvec (DX DY)' +'\rlvec (DX DY)' Draw a line from the current position, DX units in the X direction and DY units in the Y direction. The final position becomes the new current position. - -`\ravec (DX DY)' +'\ravec (DX DY)' Draw a line with an arrowhead from the current position, DX units in the X direction and Y units in the Y direction. The final position becomes the new current position. The arrowhead is aligned with the line, with the tip at the new current position. - Lines can be customized with commands to change the line width, line + Lines can be customized with commands to change the line width, line pattern and line gray level rendition. In addition, commands for changing the type and size of the arrowhead are available. -`\linewd WIDTH' +'\linewd WIDTH' Set the line width to WIDTH units. Initially WIDTH is 0.01 inches (corresponding to 3 pixels at 300 pixels to the inch). - -`\lpatt (PATTERN)' - Set lines to have the pattern `(PATTERN)'. A pattern is a - sequence of on/off lengths separated by blanks and enclosed in - parentheses. The lengths alternately specify the length of a dash - and the length of a gap between dashes. Each length is - interpreted using the current scaling and drawing units. The - pattern is used cyclically. The empty pattern signifies a solid - line. The initial line pattern is a solid line, corresponding to - the empty pattern `\lpatt ()'. - -`\setgray LEVEL' +'\lpatt (PATTERN)' + Set lines to have the pattern '(PATTERN)'. A pattern is a sequence + of on/off lengths separated by blanks and enclosed in parentheses. + The lengths alternately specify the length of a dash and the length + of a gap between dashes. Each length is interpreted using the + current scaling and drawing units. The pattern is used cyclically. + The empty pattern signifies a solid line. The initial line pattern + is a solid line, corresponding to the empty pattern '\lpatt ()'. +'\setgray LEVEL' Set the gray level of lines. Gray levels are real values from 0 (black) through intermediate values (gray) to 1 (white). The initial gray level is 0 corresponding to black. - -`\arrowheadtype t:TYPE' - Set the arrowhead type to TYPE, where TYPE is one of `F', `T', - `W', `V', or `H'. There are two kinds of arrowheads. The first - kind is a triangle. There are 3 variants: type `T' is an empty - triangle, type `F' is a filled triangle (using the current gray - level for lines), type `W' is a triangle filled with white. The - second kind of arrowhead is an open ended Vee. There are 2 - variants: type `V' has the stem continue to the tip, type `H' has - the stem stop at the base of the arrowhead. The initial arrowhead - type is `T'. - -`\arrowheadsize l:LENGTH w:WIDTH' +'\arrowheadtype t:TYPE' + Set the arrowhead type to TYPE, where TYPE is one of 'F', 'T', 'W', + 'V', or 'H'. There are two kinds of arrowheads. The first kind is + a triangle. There are 3 variants: type 'T' is an empty triangle, + type 'F' is a filled triangle (using the current gray level for + lines), type 'W' is a triangle filled with white. The second kind + of arrowhead is an open ended Vee. There are 2 variants: type 'V' + has the stem continue to the tip, type 'H' has the stem stop at the + base of the arrowhead. The initial arrowhead type is 'T'. +'\arrowheadsize l:LENGTH w:WIDTH' Set the arrowhead size to be LENGTH units long and WIDTH units wide. The width is measured across the "base" of the arrowhead. The initial arrowhead size has a LENGTH of 0.16 inches and a WIDTH of 0.08 inches. - Note that the lines which outline the arrowhead will be drawn with the -same line pattern used for the stem. Normally, arrow vectors are drawn -with the line pattern set for a solid line. Note that the fill level -used for the `F' variant of the arrowhead uses the same gray level as -used for lines. The difference between the `T' variant and the `W' -variant only shows up if the arrowhead is placed over non-white areas -of the drawing. The `W' variant obliterates the area under the -arrowhead. + Note that the lines which outline the arrowhead will be drawn with +the same line pattern used for the stem. Normally, arrow vectors are +drawn with the line pattern set for a solid line. Note that the fill +level used for the 'F' variant of the arrowhead uses the same gray level +as used for lines. The difference between the 'T' variant and the 'W' +variant only shows up if the arrowhead is placed over non-white areas of +the drawing. The 'W' variant obliterates the area under the arrowhead. - Examples of line parameter and arrowhead settings are shown in the + Examples of line parameter and arrowhead settings are shown in the following code. \centertexdraw{ \drawdim in @@ -515,81 +496,81 @@ following code. File: texdraw, Node: TeX text, Next: Circles and arcs, Prev: Line vectors, Up: TeXdraw Commands -TeX text -======== +2.6 TeX text +============ - Text may be superimposed on the drawing. The text argument of the -`\htext' command is in horizontal mode. This text can be ordinary -text, math mode expressions, or even more complicated boxes consisting -of tables and the like. The resulting TeX text is placed in a box. -The reference point of the box can be chosen to be one of nine -locations: horizontally left, center or right; vertically top, center or -bottom. The `\htext' command takes one of two forms. +Text may be superimposed on the drawing. The text argument of the +'\htext' command is in horizontal mode. This text can be ordinary text, +math mode expressions, or even more complicated boxes consisting of +tables and the like. The resulting TeX text is placed in a box. The +reference point of the box can be chosen to be one of nine locations: +horizontally left, center or right; vertically top, center or bottom. +The '\htext' command takes one of two forms. -`\htext (X Y){TEXT}' -`\htext {TEXT}' +'\htext (X Y){TEXT}' +'\htext {TEXT}' The first form of this command places the TeX text TEXT - horizontally with the text reference point at the coordinate `(X - Y)'. The new current position is `(X Y)'. The second form of - this command places the TeX text TEXT horizontally with the text + horizontally with the text reference point at the coordinate '(X + Y)'. The new current position is '(X Y)'. The second form of this + command places the TeX text TEXT horizontally with the text reference point at the current position. The text reference point - is set with the `\textref' command. + is set with the '\textref' command. - Text can be placed vertically using the `\vtext' command. The text + Text can be placed vertically using the '\vtext' command. The text argument is in horizontal mode. The TeX text is placed in a box and then rotated counterclockwise. The reference point is the point in the box, _before_ rotation of the text. Not all PostScript printer drivers support vertical text. -`\vtext (x y){TEXT}' -`\vtext {TEXT}' +'\vtext (x y){TEXT}' +'\vtext {TEXT}' The first form of this command places the TeX text TEXT vertically - with the text reference point at the coordinate `(X Y)'. The new - current position is `(X Y)'. The second form of this command + with the text reference point at the coordinate '(X Y)'. The new + current position is '(X Y)'. The second form of this command places the TeX text TEXT vertically with the text reference point at the current position. In both cases, the TeX text is placed in a box and the box is rotated counterclockwise by 90 degrees about - the text reference point. The text reference point is set with - the `\textref' command. + the text reference point. The text reference point is set with the + '\textref' command. - Text can be placed at an arbitrary angle using the `\rtext' command. + Text can be placed at an arbitrary angle using the '\rtext' command. The text argument is in horizontal mode. The TeX text is placed in a -box and then rotated counterclockwise. The reference point is the -point in the box, _before_ rotation of the text. Not all PostScript -printer drivers support rotated text. - -`\rtext td:ANGLE (x y){TEXT}' -`\rtext td:ANGLE {TEXT}' - The first form of this command places the TeX text TEXT at an - angle with the text reference point at the coordinate `(X Y)'. - The new current position is `(X Y)'. The second form of this - command places the TeX text TEXT at an angle with the text - reference point at the current position. In both cases, the TeX - text is placed in a box and the box is rotated counterclockwise by - ANGLE degrees about the text reference point. The text reference - point is set with the `\textref' command. - - The reference point for subsequent TeX text in a `\htext', `\vtext' -or `\rtext' command is set with the `\textref' command. - -`\textref h:H-REF v:V-REF' +box and then rotated counterclockwise. The reference point is the point +in the box, _before_ rotation of the text. Not all PostScript printer +drivers support rotated text. + +'\rtext td:ANGLE (x y){TEXT}' +'\rtext td:ANGLE {TEXT}' + The first form of this command places the TeX text TEXT at an angle + with the text reference point at the coordinate '(X Y)'. The new + current position is '(X Y)'. The second form of this command + places the TeX text TEXT at an angle with the text reference point + at the current position. In both cases, the TeX text is placed in + a box and the box is rotated counterclockwise by ANGLE degrees + about the text reference point. The text reference point is set + with the '\textref' command. + + The reference point for subsequent TeX text in a '\htext', '\vtext' +or '\rtext' command is set with the '\textref' command. + +'\textref h:H-REF v:V-REF' Set the text reference point for subsequent text commands. The - horizontal reference point H-REF is one of `L', `C' or `R' (left, + horizontal reference point H-REF is one of 'L', 'C' or 'R' (left, center or right). The vertical reference point V-REF is one of - `T', `C' or `B' (top, center or bottom). For rotated text, the + 'T', 'C' or 'B' (top, center or bottom). For rotated text, the reference point is determined before rotation. The initial text - reference point corresponds to `\textref h:L v:B'. + reference point corresponds to '\textref h:L v:B'. -The font used to render the text is determined as for any other TeX + The font used to render the text is determined as for any other TeX text. Normally the font used outside of TeXdraw is in effect. If desired, other fonts can be specified as part of the text. Any font changes within a TeXdraw text command remain local to that command. - Only the coordinate of the text reference point in a `\htext', -`\vtext' or `\rtext' command is used in calculating the size of the + Only the coordinate of the text reference point in a '\htext', +'\vtext' or '\rtext' command is used in calculating the size of the drawing. This means that text itself can spill outside of the drawing -area determined by TeXdraw. The area of the drawing can be increased -to include the text by issuing additional `\move' commands. +area determined by TeXdraw. The area of the drawing can be increased to +include the text by issuing additional '\move' commands. \centertexdraw{ \avec(-0.75 -0.25) \textref h:R v:C \htext{H-text} @@ -602,73 +583,69 @@ to include the text by issuing additional `\move' commands. File: texdraw, Node: Circles and arcs, Next: Bezier curves, Prev: TeX text, Up: TeXdraw Commands -Circles, ellipses and arcs -========================== +2.7 Circles, ellipses and arcs +============================== + +TeXdraw supplies commands to generate circles, ellipses and arcs. There +are two forms of the circle command. The '\lcir' command draws a circle +of given radius. The '\fcir' command draws a filled circle. In the +latter case, the circle is filled by a specified gray level. For the +filled circle, the line defining the circumference of the circle is not +drawn. Note that the gray level area filled in by the '\fcir' command +is opaque, even if the fill is chosen to be white. For either form of +the circle command, the drawing size is increased if necessary to +contain the circle. - TeXdraw supplies commands to generate circles, ellipses and arcs. -There are two forms of the circle command. The `\lcir' command draws a -circle of given radius. The `\fcir' command draws a filled circle. In -the latter case, the circle is filled by a specified gray level. For -the filled circle, the line defining the circumference of the circle is -not drawn. Note that the gray level area filled in by the `\fcir' -command is opaque, even if the fill is chosen to be white. For either -form of the circle command, the drawing size is increased if necessary -to contain the circle. - - The `\lellip' command generates an ellipse specified by the radius of + The '\lellip' command generates an ellipse specified by the radius of the ellipse in the X direction and the radius of the ellipse in the Y direction. The ellipse is symmetrical about horizontal and vertical -lines drawn through the current point. The `\fellip' command draws a +lines drawn through the current point. The '\fellip' command draws a filled ellipse. In the latter case, the ellipse is filled by a specified gray level. For the filled ellipse, the line defining the boundary of the ellipse is not drawn. For either form of the ellipse command, the drawing size is increased if necessary to contain the ellipse. - The `\larc' command generates a counterclockwise arc specified by a + The '\larc' command generates a counterclockwise arc specified by a start angle in degrees and an end angle in degrees. The center of the arc is the current position. Only the arc is drawn, not the line -joining the center to the beginning of the arc. Note that the `\larc' +joining the center to the beginning of the arc. Note that the '\larc' command does not affect the size of the drawing. -`\lcir r:RADIUS' +'\lcir r:RADIUS' Draw a circle with center at the current position. The radius is specified by RADIUS. This command draws a line along the circumference of the circle. The drawing size is increased if necessary to contain the circle. - -`\fcir f:LEVEL r:RADIUS' +'\fcir f:LEVEL r:RADIUS' Draw a filled circle with center at the current position. The - radius is specified by RADIUS. The circle is painted with the - gray level specified by LEVEL. A gray level of 1 corresponds to - white, with decreasing values getting darker. The level 0 is full - black. This command does not draw a line along the circumference. - The drawing size is increased if necessary to contain the circle. - -`\lellip rx:X-RADIUS ry:Y-RADIUS' - Draw an ellipse with center at the current position. The radius - in the X direction is specified by X-RADIUS. The radius in the Y + radius is specified by RADIUS. The circle is painted with the gray + level specified by LEVEL. A gray level of 1 corresponds to white, + with decreasing values getting darker. The level 0 is full black. + This command does not draw a line along the circumference. The + drawing size is increased if necessary to contain the circle. +'\lellip rx:X-RADIUS ry:Y-RADIUS' + Draw an ellipse with center at the current position. The radius in + the X direction is specified by X-RADIUS. The radius in the Y direction is specified by Y-RADIUS. The drawing size is increased if necessary to contain the ellipse. - -`\fellip f:LEVEL rx:X-RADIUS ry:Y-RADIUS' +'\fellip f:LEVEL rx:X-RADIUS ry:Y-RADIUS' Draw a filled ellipse with center at the current position. The radius in the X direction is specified by X-RADIUS. The radius in the Y direction is specified by Y-RADIUS. The ellipse is painted with the gray level specified by LEVEL. A gray level of 1 corresponds to white, with decreasing values getting darker. The - level 0 is full black. This command does not draw a line along - the boundary of the ellipse. The drawing size is increased if + level 0 is full black. This command does not draw a line along the + boundary of the ellipse. The drawing size is increased if necessary to contain the ellipse. - -`\larc r:RADIUS sd:START-ANGLE ed:END-ANGLE' +'\larc r:RADIUS sd:START-ANGLE ed:END-ANGLE' Draw a counterclockwise arc. The center of the arc is at the current position. The radius is specified by RADIUS. The start and end angles (in degrees) are specified by START-ANGLE and END-ANGLE. This command does not affect the limits (size) of the drawing. - As an example, the following commands draw a filled circle, and + As an example, the following commands draw a filled circle, and superimpose an arc. \centertexdraw{ \linewd 0.02 @@ -677,7 +654,7 @@ superimpose an arc. \lvec (+0.707 +0.707) \move (0 0) \lvec (-0.707 +0.707) } - Note that for the arc command, the resulting figure can spill outside + Note that for the arc command, the resulting figure can spill outside of the TeXdraw box as determined by the maximum excursions of the coordinates. Extra moves can be used to compensate for the size of the arc. @@ -685,43 +662,40 @@ arc. File: texdraw, Node: Bezier curves, Next: Fill commands, Prev: Circles and arcs, Up: TeXdraw Commands -Bezier curves -============= +2.8 Bezier curves +================= - Bezier curves in TeXdraw use 4 reference coordinates, two as the end +Bezier curves in TeXdraw use 4 reference coordinates, two as the end points and two others to control the shape of the curve. Let the 4 -points be `(X0 Y0)', `(X1 Y1)', `(X2 Y2)' and `(X3 Y3)'. The curve +points be '(X0 Y0)', '(X1 Y1)', '(X2 Y2)' and '(X3 Y3)'. The curve starts out tangent to the line joining the first two points and ends up tangent to the line joining the second two points. The control points "pull" at the curve to control the curvature. The amount of pull increases with the distance of the control point from the endpoint. - As the parameter u varies from 0 to 1, the coordinates of the Bezier + As the parameter u varies from 0 to 1, the coordinates of the Bezier curve are given by a pair of parametric cubic equations, -x(u) = (1-u)^3 x0 + 3u (1-u)^2 x1 + 3u^2 (1-u) x2 + u^3 x3 +x(u) = (1-u)^3 x0 + 3u (1-u)^2 x1 + 3u^2 (1-u) x2 + u^3 x3 y(u) = +(1-u)^3 y0 + 3u (1-u)^2 y1 + 3u^2 (1-u) y2 + u^3 y3 . -y(u) = (1-u)^3 y0 + 3u (1-u)^2 y1 + 3u^2 (1-u) y2 + u^3 y3 . - -`\clvec (X1 Y1)(X2 Y2)(X3 Y3)' +'\clvec (X1 Y1)(X2 Y2)(X3 Y3)' Draw a Bezier curve from the current position to the coordinate - `(X3 Y3)' which becomes the new current position. The coordinates - `(X1 Y1)' and `(X2 Y2)' serve as control points for the curve. + '(X3 Y3)' which becomes the new current position. The coordinates + '(X1 Y1)' and '(X2 Y2)' serve as control points for the curve. Only the last coordinate given is used to update the size of the drawing. - Note that only 3 coordinate pairs are specified. The other point is the -current position before the `\clvec' command is executed. Only the -last coordinate specified in the `\clvec' command is used to determine -the extent of the drawing. While the Bezier curve passes through the -old current position and the new current position, in general the curve -will not reach the intermediate control points. The curve is always -entirely enclosed by the convex quadrilateral defined by the two end -points and the two control points. Note that the curve may pass -outside the limits of the drawing as determined by the end point of the -curve. - - A simple Bezier curve is produced by the following example. +current position before the '\clvec' command is executed. Only the last +coordinate specified in the '\clvec' command is used to determine the +extent of the drawing. While the Bezier curve passes through the old +current position and the new current position, in general the curve will +not reach the intermediate control points. The curve is always entirely +enclosed by the convex quadrilateral defined by the two end points and +the two control points. Note that the curve may pass outside the limits +of the drawing as determined by the end point of the curve. + + A simple Bezier curve is produced by the following example. \btexdraw \move (0 0) \clvec (0 1)(1 0)(1 1) @@ -730,39 +704,38 @@ curve. File: texdraw, Node: Fill commands, Prev: Bezier curves, Up: TeXdraw Commands -Fill commands -============= - - PostScript deals with paths consisting of line segments. The paths -can be closed and the interior of the closed region filled. From -TeXdraw, paths start with a `\move' or `\rmove' command and continue -with `\lvec', `\rlvec' or `\clvec' commands. The TeXdraw fill commands -close the path and fill the interior of the closed region. Closing the -path means that effectively another `\lvec' line is drawn from the last -point specified to the initial point. TeXdraw provides two forms of -the fill command. The `\ifill' fills the interior of the region with -the given gray level. The lines defining the path are not drawn. The -`\lfill' command fills the region defined by the closed path and draws -a line along the enclosing path. Note for both forms of the fill -command, the gray level used for filling is opaque, even if the gray -level is chosen to be white. - -`\lfill f:LEVEL' +2.9 Fill commands +================= + +PostScript deals with paths consisting of line segments. The paths can +be closed and the interior of the closed region filled. From TeXdraw, +paths start with a '\move' or '\rmove' command and continue with +'\lvec', '\rlvec' or '\clvec' commands. The TeXdraw fill commands close +the path and fill the interior of the closed region. Closing the path +means that effectively another '\lvec' line is drawn from the last point +specified to the initial point. TeXdraw provides two forms of the fill +command. The '\ifill' fills the interior of the region with the given +gray level. The lines defining the path are not drawn. The '\lfill' +command fills the region defined by the closed path and draws a line +along the enclosing path. Note for both forms of the fill command, the +gray level used for filling is opaque, even if the gray level is chosen +to be white. + +'\lfill f:LEVEL' Close the current path, draw the line around the path using the current grey level for lines and paint the interior of the region with specified gray level LEVEL. Gray levels are real values from 0 (black) through intermediate values (grays) to 1 (white). - -`\ifill f:LEVEL' +'\ifill f:LEVEL' Close the current path and paint the interior of the region with gray level LEVEL. The line around the path is not drawn. Gray levels are real values from 0 (black) through intermediate values (grays) to 1 (white). - The following example draws a "flag" with the interior filled in. The -path around the boundary is given in a clockwise order to define a + The following example draws a "flag" with the interior filled in. +The path around the boundary is given in a clockwise order to define a closed path. We could take advantage of the fact that the fill command -will close an open path to eliminate one of the `\lvec' commands. +will close an open path to eliminate one of the '\lvec' commands. \centertexdraw{ \move (0.5 0) \lvec (0 0.5) \clvec (0.5 0.85)(1 0.65)(1.5 1) @@ -770,22 +743,22 @@ will close an open path to eliminate one of the `\lvec' commands. \lfill f:0.8 } - In TeXdraw, the `\move' command always terminates any previous paths + In TeXdraw, the '\move' command always terminates any previous paths and starts a new path. Commands that change line parameters (e.g. -`\setgray' or `\lpatt') also terminate paths and start new paths. The +'\setgray' or '\lpatt') also terminate paths and start new paths. The circle, ellipse and arc commands do not affect the definition of the -current path. The `\avec' command is not appropriate for defining a +current path. The '\avec' command is not appropriate for defining a path to be filled. It ends a subpath at its tail and begins a new -subpath at its tip. Filling a region defined by a path with subpaths -is more complicated in that each subpath is closed before filling. +subpath at its tip. Filling a region defined by a path with subpaths is +more complicated in that each subpath is closed before filling. File: texdraw, Node: Drawing Segments and Scaling, Next: Using TeXdraw with LaTeX, Prev: TeXdraw Commands, Up: Top -Drawing Segments and Scaling -**************************** +3 Drawing Segments and Scaling +****************************** - TeXdraw provides individually scaled segments which can be used to +TeXdraw provides individually scaled segments which can be used to create relocatable drawing modules. * Menu: @@ -800,39 +773,38 @@ create relocatable drawing modules. File: texdraw, Node: Drawing segments, Next: Drawing paths, Up: Drawing Segments and Scaling -Drawing segments -================ +3.1 Drawing segments +==================== - A TeXdraw drawing segment allows for local modifications of -parameters and relative positioning. A TeXdraw segment is delimited by -a `\bsegment' command and an `\esegment' command. Inside the segment, -the initial current position is `(0 0)'. Any changes to parameters -such as the gray level and the line width, remain local to the segment. -Segments are implemented in TeX using a `\begingroup' and `\endgroup'. +A TeXdraw drawing segment allows for local modifications of parameters +and relative positioning. A TeXdraw segment is delimited by a +'\bsegment' command and an '\esegment' command. Inside the segment, the +initial current position is '(0 0)'. Any changes to parameters such as +the gray level and the line width, remain local to the segment. +Segments are implemented in TeX using a '\begingroup' and '\endgroup'. Segments can be nested. -`\bsegment' +'\bsegment' Start a drawing segment. The coordinate system is shifted such - that the current position corresponds to the coordinate `(0 0)'. + that the current position corresponds to the coordinate '(0 0)'. Changes to scaling, position and line parameters stay local to the drawing segment. - -`\esegment' +'\esegment' End a drawing segment. The current position in effect before the - corresponding `\bsegment' command is restored. The scaling and + corresponding '\bsegment' command is restored. The scaling and line parameter values revert to those in effect before the - corresponding `\bsegment' command was invoked. + corresponding '\bsegment' command was invoked. File: texdraw, Node: Drawing paths, Next: Saving positions, Prev: Drawing segments, Up: Drawing Segments and Scaling -Drawing paths -============= +3.2 Drawing paths +================= - Certain subtle interactions occur between drawing segments and fill +Certain subtle interactions occur between drawing segments and fill operations. In PostScript, lines are drawn by first defining a path, then later stroking the path to draw the line. In TeXdraw, this -stroking occurs when the line is terminated, say by a `\move' command. +stroking occurs when the line is terminated, say by a '\move' command. PostScript paths are interrupted by, but continue after a drawing segment. This means that a path started before a segment may not be stroked (drawn) until after the segment ends. Consider the following @@ -844,64 +816,63 @@ example. \fcir f:0.8 r:0.5 \esegment \move (0 0) -A PostScript path is started at `(0 0)' and continues with a line -to `(1 1)'. This path is interrupted by the segment. The filled -circle is drawn next. After the segment, the path continues and is not -stroked until the `\move (0 0)' command after the end of the segment. -This means that the line appears on top of the filled region. - - If the fill operation is to cover the line, the path must be stroked -before the fill operation. From TeXdraw, the move commands `\move' and -`\rmove', and the end TeXdraw command `\etexdraw' terminate a path and + A PostScript path is started at '(0 0)' and continues with a line to +'(1 1)'. This path is interrupted by the segment. The filled circle is +drawn next. After the segment, the path continues and is not stroked +until the '\move (0 0)' command after the end of the segment. This +means that the line appears on top of the filled region. + + If the fill operation is to cover the line, the path must be stroked +before the fill operation. From TeXdraw, the move commands '\move' and +'\rmove', and the end TeXdraw command '\etexdraw' terminate a path and cause it to be stroked. Within a segment, the end segment command -`\esegment' also terminates and strokes a path. In the example above, -the line can be stroked by inserting a move command (such as a `\rmove +'\esegment' also terminates and strokes a path. In the example above, +the line can be stroked by inserting a move command (such as a '\rmove (0 0)' which does not affect the position), before the start of the segment. File: texdraw, Node: Saving positions, Next: Scaling coordinates, Prev: Drawing paths, Up: Drawing Segments and Scaling -Saving positions -================ +3.3 Saving positions +==================== - The `\savecurrpos' command saves the current position. The saved +The '\savecurrpos' command saves the current position. The saved position is an absolute position, not one relative to a segment. The position saving mechanism is global; the position can be saved within a nested segment and then used outside of the segment. The X and Y coordinates of the position are saved separately as named coordinates. -The names are of the form `*NAME', with the leading `*' being -obligatory. A companion command, `\savepos', saves a given coordinate +The names are of the form '*NAME', with the leading '*' being +obligatory. A companion command, '\savepos', saves a given coordinate (relative to the current segment) as an absolute symbolic position. -`\savecurrpos (*PX *PY)' +'\savecurrpos (*PX *PY)' Save the current position as the absolute position referenced by - `(*PX *PY)'. - -`\savepos (X Y)(*PX *PY)' - Save the coordinate position `(X Y)' as the absolute position - referenced by `(*PX *PY)'. The coordinate `(X Y)' is interpreted + '(*PX *PY)'. +'\savepos (X Y)(*PX *PY)' + Save the coordinate position '(X Y)' as the absolute position + referenced by '(*PX *PY)'. The coordinate '(X Y)' is interpreted in the normal fashion as a coordinate relative to the current segment, using the current scaling factors and drawing unit. - The symbolic names used to specify a saved position can consist of any -characters that are not special to TeX, but must start with a `*' + The symbolic names used to specify a saved position can consist of +any characters that are not special to TeX, but must start with a '*' character. The symbolic names can be used as the X and/or Y coordinate in any command that needs a coordinate. Symbolic coordinates are not -normally used with relative motion commands such as `\rlvec' or -`\rmove'. If used with relative motion, the corresponding displacement +normally used with relative motion commands such as '\rlvec' or +'\rmove'. If used with relative motion, the corresponding displacement is equal to the symbolic coordinate value. - On exit from a segment, the position and graphics state on entry is + On exit from a segment, the position and graphics state on entry is restored. Any changes to line types, scaling and position are discarded. However, it is sometimes useful alter the position on exit -from a segment. The `\savepos' command allows for the saving of a +from a segment. The '\savepos' command allows for the saving of a position within the segment. This position can be restored after the -`\esegment' with a `\move' command using the saved symbolic position. +'\esegment' with a '\move' command using the saved symbolic position. This approach can be used to build modules which operate in a manner analogous to the basic relative motion line vector commands. - The following example defines a macro which draws a box 0.75 inches + The following example defines a macro which draws a box 0.75 inches wide by 0.5 inches high containing centered text. On leaving the macro the position will be set at a point on the righthand side of the box. \def\tbox #1{\bsegment @@ -911,7 +882,7 @@ the position will be set at a point on the righthand side of the box. \savepos (0.75 0)(*ex *ey) \esegment \move (*ex *ey)} -With this definition, we can treat `\tbox' in the same way as the + With this definition, we can treat '\tbox' in the same way as the basic vector commands, stringing them together to form a block diagram as in this example. \centertexdraw{ @@ -921,63 +892,60 @@ as in this example. File: texdraw, Node: Scaling coordinates, Next: Drawing size, Prev: Saving positions, Up: Drawing Segments and Scaling -Scaling coordinates -=================== +3.4 Scaling coordinates +======================= - There are two scale factors available, the unit scale factor and the +There are two scale factors available, the unit scale factor and the segment scale factor. The overall scale factor is the product of these two. There are absolute and relative versions of commands to change these scale factors. - The unit scale factor is normally used to affect global scale changes. -Changes to the unit scale factor remains local to a segment, but -propagate to inferior segments. The default value is unity. + The unit scale factor is normally used to affect global scale +changes. Changes to the unit scale factor remains local to a segment, +but propagate to inferior segments. The default value is unity. - The segment scale factor is used for local scale changes. It remains + The segment scale factor is used for local scale changes. It remains local to a segment. The segment scale factor is reset to unity on entry into each segment. This means that changes to the segment scale factor do not propagate to inferior segments. -`\setunitscale SCALE' - Set the unit scaling to SCALE. The argument SCALE is a real - number which is used to scale coordinate values. The overall - scaling factor is the product of the unit scale factor and the - segment scale factor. - -`\relunitscale VALUE' - Adjust the unit scale factor by multiplying by VALUE. This has - the effect of multiplying the overall scale factor by the same - factor. The overall scaling factor is the product of the unit - scale factor and the segment scale factor. - -`\setsegscale SCALE' - Set the segment scale factor. The argument SCALE is a real number - which is used to scale coordinate values. The overall scale +'\setunitscale SCALE' + Set the unit scaling to SCALE. The argument SCALE is a real number + which is used to scale coordinate values. The overall scaling factor is the product of the unit scale factor and the segment scale factor. - -`\relsegscale VALUE' +'\relunitscale VALUE' + Adjust the unit scale factor by multiplying by VALUE. This has the + effect of multiplying the overall scale factor by the same factor. + The overall scaling factor is the product of the unit scale factor + and the segment scale factor. +'\setsegscale SCALE' + Set the segment scale factor. The argument SCALE is a real number + which is used to scale coordinate values. The overall scale factor + is the product of the unit scale factor and the segment scale + factor. +'\relsegscale VALUE' Adjust the segment scale factor by multiplying by VALUE. This has the effect of multiplying the current overall scale factor by the - same factor. The overall scaling factor is the product of the - unit scale factor and the segment scale factor. + same factor. The overall scaling factor is the product of the unit + scale factor and the segment scale factor. - In addition to the unit scale factor and the segment scale factor, the -scaling can be controlled by the choice of drawing units with the -command `\drawdim' (*note Coordinate specification::). + In addition to the unit scale factor and the segment scale factor, +the scaling can be controlled by the choice of drawing units with the +command '\drawdim' (*note Coordinate specification::). -`\drawdim cm \setunitscale 2.54' +'\drawdim cm \setunitscale 2.54' Set the units to centimetres scaled by 2.54. Together these - commands are effectively the same as `\drawdim in'. + commands are effectively the same as '\drawdim in'. - The segment scale can be used to allow scale changes in segments so + The segment scale can be used to allow scale changes in segments so that values are in more convenient units. For example suppose dimensions in a segment are multiples of one third of an inch. The segment scale can be set once to make 1 drawing unit equal 0.3333 inches. From that point on, coordinates can be specified with integer values. - The following example defines a macro to draw a rectangular box which + The following example defines a macro to draw a rectangular box which is twice as wide as it is high. The width is specified as an argument. \def\mybox #1{\bsegment \setsegscale #1 @@ -988,70 +956,69 @@ is twice as wide as it is high. The width is specified as an argument. File: texdraw, Node: Drawing size, Next: Initial current position, Prev: Scaling coordinates, Up: Drawing Segments and Scaling -Drawing size -============ +3.5 Drawing size +================ - The effective size of the drawing is determined by the maximum -excursions of the coordinates supplied to TeXdraw commands. The -minimum and maximum scaled X and Y coordinates are tallied. Note that -`\move' commands contribute to the determination of the calculated size -of the drawing, even though they do not generate visible lines. The -circle and ellipse commands add a compensation for the radii of circles -and ellipses. The final TeXdraw drawing is placed in a TeX box with -lower lefthand corner corresponding to `('X-min Y-min`)' and upper -righthand corner at `('X-max Y-max`)'. - - Text generated by `\htext', `\vtext' or `\rtext' can spill outside +The effective size of the drawing is determined by the maximum +excursions of the coordinates supplied to TeXdraw commands. The minimum +and maximum scaled X and Y coordinates are tallied. Note that '\move' +commands contribute to the determination of the calculated size of the +drawing, even though they do not generate visible lines. The circle and +ellipse commands add a compensation for the radii of circles and +ellipses. The final TeXdraw drawing is placed in a TeX box with lower +lefthand corner corresponding to '('X-min Y-min')' and upper righthand +corner at '('X-max Y-max')'. + + Text generated by '\htext', '\vtext' or '\rtext' can spill outside the box as determined above. Only the text reference point is guaranteed to be in the drawing box. Arcs can also spill outside the drawing box. Note also that the widths of lines, and the sizes of arrowheads do not affect the size of the drawing. The calculated size -of the drawing will never be larger than the actual size of the -drawing. In extreme cases in which text or lines extend far outside -the drawing, extra `\move' commands should be used to establish the -size of the drawing so that the TeXdraw box includes all of the drawing. +of the drawing will never be larger than the actual size of the drawing. +In extreme cases in which text or lines extend far outside the drawing, +extra '\move' commands should be used to establish the size of the +drawing so that the TeXdraw box includes all of the drawing. - TeXdraw provides the `\drawbb' command to draw a box which indicates -the effective size of the drawing. Whenever `\drawbb' is invoked, a + TeXdraw provides the '\drawbb' command to draw a box which indicates +the effective size of the drawing. Whenever '\drawbb' is invoked, a ruled box is drawn around the drawing as it has been sized up to that -point. Normally `\drawbb' is invoked just before the end of a drawing +point. Normally '\drawbb' is invoked just before the end of a drawing to indicate the effective size of the final drawing. -`\drawbb' +'\drawbb' Draw a ruled box around the effective size of a drawing produced by TeXdraw commands. File: texdraw, Node: Initial current position, Prev: Drawing size, Up: Drawing Segments and Scaling -Initial current position -======================== +3.6 Initial current position +============================ - The first operation in a drawing should be a move to establish the +The first operation in a drawing should be a move to establish the current position. The current position can be established explicitly -through a `\move' command or a text positioning command such as -`\htext' with a coordinate. However, if an attempt is made to use a -drawing command which needs a current position and none has been -established, TeXdraw implicitly sets the initial current position to -`(0 0)'. The size of the TeXdraw figure is normally determined from -the sequence of coordinates specified, but will include the implicit -initial position in case another initial position has not been -explicitly specified. +through a '\move' command or a text positioning command such as '\htext' +with a coordinate. However, if an attempt is made to use a drawing +command which needs a current position and none has been established, +TeXdraw implicitly sets the initial current position to '(0 0)'. The +size of the TeXdraw figure is normally determined from the sequence of +coordinates specified, but will include the implicit initial position in +case another initial position has not been explicitly specified. File: texdraw, Node: Using TeXdraw with LaTeX, Next: More Details, Prev: Drawing Segments and Scaling, Up: Top -Using TeXdraw with LaTeX -************************ +4 Using TeXdraw with LaTeX +************************** - The LaTeX typesetting system uses a structured approach to declaring -typesetting environments. For LaTeX2e, the `texdraw' package defines -the `texdraw' environment. The TeXdraw environment is started with a -`\begin{texdraw}' command and terminated with an `\end{texdraw}' +The LaTeX typesetting system uses a structured approach to declaring +typesetting environments. For LaTeX2e, the 'texdraw' package defines +the 'texdraw' environment. The TeXdraw environment is started with a +'\begin{texdraw}' command and terminated with an '\end{texdraw}' command. All of the basic TeXdraw commands can be used within the -`texdraw' environment. +'texdraw' environment. - As an example, a LaTeX2e variant of an earlier example can be + As an example, a LaTeX2e variant of an earlier example can be constructed as follows. \documentclass{article} \usepackage{texdraw} @@ -1074,10 +1041,10 @@ constructed as follows. ... \end{document} - This example illustrates the use of the LaTeX command `\newcommand' -as an alternative to the plain TeX command `\def'. Instead of the -basic TeXdraw command `\centertexdraw', a nested combination of the -LaTeX centering environment and the TeXdraw environment is used. + This example illustrates the use of the LaTeX command '\newcommand' +as an alternative to the plain TeX command '\def'. Instead of the basic +TeXdraw command '\centertexdraw', a nested combination of the LaTeX +centering environment and the TeXdraw environment is used. * Menu: @@ -1086,34 +1053,34 @@ LaTeX centering environment and the TeXdraw environment is used. File: texdraw, Node: PostScript printer drivers, Up: Using TeXdraw with LaTeX -PostScript printer drivers -========================== - - The `texdraw' package uses the printer driver interface provided by -the standard LaTeX2e `graphics' package. Any options to the `texdraw' -package are passed to the `graphics' package. Specifically, the name -of the PostScript driver to be used can be specified as an option to -the `texdraw' package. With no explicit printer driver option, the -default printer driver associated with the `graphics' package is used. - - The `texdraw' package can be used with any of the printer drivers -supported by the `graphics' package that allow for the importation of -PostScript graphics files, viz., `dvips', `xdvi', `dvi2ps', `dvialw', -`dvilaser', `dvipsone', `dviwindo', `dvitops', `oztex', `psprint', -`textures', `pctexps', and `pctexwin'. Not all of these drivers -support the text rotation needed for the TeXdraw commands `\vtext' and -`\rtext'. Of the drivers listed above, only the following support -support text rotation: `dvips', `xdvi', `dvi2ps', `dvitops', -`textures', and `pctexps'. +4.1 PostScript printer drivers +============================== + +The 'texdraw' package uses the printer driver interface provided by the +standard LaTeX2e 'graphics' package. Any options to the 'texdraw' +package are passed to the 'graphics' package. Specifically, the name of +the PostScript driver to be used can be specified as an option to the +'texdraw' package. With no explicit printer driver option, the default +printer driver associated with the 'graphics' package is used. + + The 'texdraw' package can be used with any of the printer drivers +supported by the 'graphics' package that allow for the importation of +PostScript graphics files, viz., 'dvips', 'xdvi', 'dvi2ps', 'dvialw', +'dvilaser', 'dvipsone', 'dviwindo', 'dvitops', 'oztex', 'psprint', +'textures', 'pctexps', and 'pctexwin'. Not all of these drivers support +the text rotation needed for the TeXdraw commands '\vtext' and '\rtext'. +Of the drivers listed above, only the following support support text +rotation: 'dvips', 'xdvi', 'dvi2ps', 'dvitops', 'textures', and +'pctexps'. File: texdraw, Node: More Details, Next: PostScript Commands, Prev: Using TeXdraw with LaTeX, Up: Top -More Details -************ +5 More Details +************** - The first part of this chapter offers some suggestions for strategies -to isolate errors in TeX and TeXdraw input. The second part of this +The first part of this chapter offers some suggestions for strategies to +isolate errors in TeX and TeXdraw input. The second part of this chapter discusses implementational issues. An awareness of these issues is useful if TeXdraw is to be extended. @@ -1126,56 +1093,56 @@ is useful if TeXdraw is to be extended. File: texdraw, Node: Errors while using TeXdraw, Next: Extending TeXdraw, Up: More Details -Errors while using TeXdraw -========================== +5.1 Errors while using TeXdraw +============================== - TeX input is notoriously difficult to debug. If TeX reports errors, -so much the better. If the cause is not immediately obvious, consider +TeX input is notoriously difficult to debug. If TeX reports errors, so +much the better. If the cause is not immediately obvious, consider using a binary search strategy, removing sections of code with the -premature insertion of the `\bye' (or `\end{document}' for LaTeX) +premature insertion of the '\bye' (or '\end{document}' for LaTeX) command (with the appropriate closing of any open groups and the like). -Other strategies include the insertion of `\message{I am here}' at -appropriate places. Try using `\tracingmacros=1'. Many problems turn +Other strategies include the insertion of '\message{I am here}' at +appropriate places. Try using '\tracingmacros=1'. Many problems turn out to be due to an incorrect number of macro arguments or incorrectly -delimited macro arguments. The `\tracingmacros=1' option writes the +delimited macro arguments. The '\tracingmacros=1' option writes the macro arguments and macro expansions to the TeX log file. - Certain errors may not manifest themselves until well after the + Certain errors may not manifest themselves until well after the offending command. For instance, if a closing parenthesis is missing from a TeXdraw coordinate, TeX continues searching for the parenthesis. If one is found, perhaps many lines later, the TeXdraw error message -`invalid coordinate' will be printed at this later point. +'invalid coordinate' will be printed at this later point. - All input in the TeXdraw environment should be intended for + All input in the TeXdraw environment should be intended for interpretation by TeXdraw commands. TeXdraw places text inside a zero size box (the text itself extends outside the box). Extraneous input -manifests itself as a non-zero size TeXdraw text box. This causes the +manifests itself as a non-zero size TeXdraw text box. This causes the TeXdraw text and the PostScript graphics to be displaced from one another. An error message is issued if a non-zero width TeXdraw text box is detected. If this error message appears, look for unintended character sequences amongst the commands to TeXdraw. - Several TeXdraw commands pass their arguments "raw" to the PostScript + Several TeXdraw commands pass their arguments "raw" to the PostScript file. That means that invalid arguments can generate PostScript errors when the document is printed. For instance the argument of the -`\setgray' command is passed straight through to the PostScript file. +'\setgray' command is passed straight through to the PostScript file. If this argument is non-numeric, a PostScript error results. Not all PostScript printers report errors back to the user. The print may just stop prematurely. One approach to debugging is to use a PostScript -previewer on a workstation. That way, one can determine at which point +previewer on a workstation. That way, one can determine at which point in the drawing the PostScript error occurs. File: texdraw, Node: Extending TeXdraw, Next: How TeXdraw merges graphics and text, Prev: Errors while using TeXdraw, Up: More Details -Extending TeXdraw -================= +5.2 Extending TeXdraw +===================== - TeXdraw is implemented using a combination of TeX commands and +TeXdraw is implemented using a combination of TeX commands and PostScript code. This section discusses some of the implementational issues as they relate to extending TeXdraw. - TeXdraw as implemented, offers a basic set of drawing features. + TeXdraw as implemented, offers a basic set of drawing features. These are adequate for certain tasks such as producing block diagrams. There are different approaches to extending TeXdraw to include other functions. In some cases, the desired functionality can be achieved by @@ -1186,11 +1153,11 @@ access to different features of PostScript is desired. The appropriate approach would be to write new PostScript procedures which can be accessed by TeX macros. - Included with TeXdraw is a set of macros for directly accessing + Included with TeXdraw is a set of macros for directly accessing PostScript functions. These are described in an appendix (*note PostScript Commands::). - TeXdraw also comes with a toolbox of routines for handling much of + TeXdraw also comes with a toolbox of routines for handling much of the user interface, converting between different coordinate representations and the like. The macros for coordinate decoding and for computations involving coordinates are described in an appendix @@ -1206,20 +1173,20 @@ for computations involving coordinates are described in an appendix File: texdraw, Node: Scaling, Next: Resolution, Up: Extending TeXdraw -Scaling -------- +5.2.1 Scaling +------------- - The scaling commands provided in TeXdraw are designed to affect only -the coordinate values specified in commands. For instance, changing the -`\setunitscale' value changes the interpretation of the coordinate in -an `\avec (X Y)' command, but does not change the line width or -arrowhead sizes in effect. None of the TeXdraw scaling commands affect -the size of TeX text produced by, for instance, the `\htext' command. -Scale changes will however affect the positioning of text for -subsequent commands. +The scaling commands provided in TeXdraw are designed to affect only the +coordinate values specified in commands. For instance, changing the +'\setunitscale' value changes the interpretation of the coordinate in an +'\avec (X Y)' command, but does not change the line width or arrowhead +sizes in effect. None of the TeXdraw scaling commands affect the size +of TeX text produced by, for instance, the '\htext' command. Scale +changes will however affect the positioning of text for subsequent +commands. - The line parameters are changed only if the corresponding commands to -change them are issued. If the `\linewd' command is given, the current + The line parameters are changed only if the corresponding commands to +change them are issued. If the '\linewd' command is given, the current coordinate scaling is used to determine the line width. To achieve a behaviour more like a global scaling, whenever the scale factor is changed, the line parameters should be set again. @@ -1227,81 +1194,81 @@ changed, the line parameters should be set again. File: texdraw, Node: Resolution, Next: Text placement, Prev: Scaling, Up: Extending TeXdraw -Resolution ----------- - - TeXdraw scales coordinates before passing them to PostScript. -Keeping track of the coordinate scaling is necessary, in any event, to -allow TeXdraw to compute the maximum excursions of the coordinates. -TeXdraw uses pixel units in its PostScript code. One pixel unit is -equal to 1/300 of an inch. TeXdraw issues PostScript commands with -integer valued pixel coordinates. This sets the positioning resolution -for TeXdraw. The passing of integer valued coordinates which -correspond to the device resolution keeps lines aligned with the device -grid; parallel lines of the same width will be rendered with the same -width. - - The position saving mechanism in TeXdraw (*note Saving positions::) +5.2.2 Resolution +---------------- + +TeXdraw scales coordinates before passing them to PostScript. Keeping +track of the coordinate scaling is necessary, in any event, to allow +TeXdraw to compute the maximum excursions of the coordinates. TeXdraw +uses pixel units in its PostScript code. One pixel unit is equal to +1/300 of an inch. TeXdraw issues PostScript commands with integer +valued pixel coordinates. This sets the positioning resolution for +TeXdraw. The passing of integer valued coordinates which correspond to +the device resolution keeps lines aligned with the device grid; parallel +lines of the same width will be rendered with the same width. + + The position saving mechanism in TeXdraw (*note Saving positions::) associates the pixel coordinates of a position with the specified name. - TeXdraw uses the limited real number representation provided by TeX. + TeXdraw uses the limited real number representation provided by TeX. These operations are based on the representation of dimensions as -real-valued numbers of points. Internally in TeX, dimensions are -stored 32-bit values, normalized so that 1 pt corresponds to the scaled -point (sp) value of 65536. Dimensions with magnitudes between 0.000015 -pt and 32767 pt can be represented. This is also the dynamic range of -the TeXdraw pixel coordinates passed to PostScript. TeXdraw must -convert from user supplied coordinates using the scaling factor (which -itself consists of two components, the unit scale and the segment scale) -and a pixel conversion factor. The use of limited precision real -numbers in these computations can cause accumulation of error when -relative scaling is used repeatedly. +real-valued numbers of points. Internally in TeX, dimensions are stored +32-bit values, normalized so that 1 pt corresponds to the scaled point +(sp) value of 65536. Dimensions with magnitudes between 0.000015 pt and +32767 pt can be represented. This is also the dynamic range of the +TeXdraw pixel coordinates passed to PostScript. TeXdraw must convert +from user supplied coordinates using the scaling factor (which itself +consists of two components, the unit scale and the segment scale) and a +pixel conversion factor. The use of limited precision real numbers in +these computations can cause accumulation of error when relative scaling +is used repeatedly. File: texdraw, Node: Text placement, Next: Intermediate PostScript file, Prev: Resolution, Up: Extending TeXdraw -Text placement --------------- +5.2.3 Text placement +-------------------- - While in the TeXdraw environment, TeX text is placed in a TeX box -while PostScript code is written to the intermediate file. At the end -of the TeXdraw environment, the size of the drawing is determined. A -TeX box of this size is created. The TeX `\special' mechanism is used -to instruct the PostScript driver program to position the PostScript +While in the TeXdraw environment, TeX text is placed in a TeX box while +PostScript code is written to the intermediate file. At the end of the +TeXdraw environment, the size of the drawing is determined. A TeX box +of this size is created. The TeX '\special' mechanism is used to +instruct the PostScript driver program to position the PostScript drawing from the intermediate file in this area. Next, the text generated by TeXdraw is positioned and placed in the box. Note that when the document is printed, the PostScript drawing is placed on the page before the TeX text; TeX text will appear on top of graphics. - The rotation of text is carried out with in-line PostScript code which -does not appear in the intermediate PostScript file. This code is sent -to the PostScript driver with a `\special' command. This PostScript -code is embedded in the dvi (device independent) file that TeX produces. + The rotation of text is carried out with in-line PostScript code +which does not appear in the intermediate PostScript file. This code is +sent to the PostScript driver with a '\special' command. This +PostScript code is embedded in the dvi (device independent) file that +TeX produces. File: texdraw, Node: Intermediate PostScript file, Prev: Text placement, Up: Extending TeXdraw -The intermediate PostScript file --------------------------------- +5.2.4 The intermediate PostScript file +-------------------------------------- - The intermediate PostScript file consists of a header, a body and a +The intermediate PostScript file consists of a header, a body and a trailer following Encapsulated PostScript File (EPSF) standards. The header sets up PostScript definitions and default parameter values. The -trailer includes the `BoundingBox' information which gives the +trailer includes the 'BoundingBox' information which gives the coordinates in default PostScript units (72 per inch) for the lower lefthand corner and the upper righthand corner of the drawing. The body of the intermediate PostScript file contains the PostScript commands generated by TeXdraw. - Many moves in TeXdraw serve only to position text or to reset saved + Many moves in TeXdraw serve only to position text or to reset saved positions. TeXdraw buffers move commands in order to be able to collapse runs of moves. Only the last move of a run of moves is actually written to the PostScript file. However the intermediate moves still affect the size of the drawing. The expunging of moves means that -the PostScript file `BoundingBox' information may indicate a drawing +the PostScript file 'BoundingBox' information may indicate a drawing size larger than the PostScript commands themselves would warrant. - Drawing segments in TeXdraw show up in the PostScript file as saves + Drawing segments in TeXdraw show up in the PostScript file as saves and restores of the PostScript graphics state. Segment starts are buffered and only written out if necessary. This way "empty" segments do not generate output to the PostScript file. These empty segments @@ -1309,47 +1276,47 @@ arise if a segment contains only moves and text commands. The moves inside the segment are not needed since they are local to the segment, and the text commands do not generate output to the PostScript file. - If TeXdraw is used only for moves and text, no intermediate + If TeXdraw is used only for moves and text, no intermediate PostScript file will be created. File: texdraw, Node: How TeXdraw merges graphics and text, Prev: Extending TeXdraw, Up: More Details -How TeXdraw merges graphics and text -==================================== +5.3 How TeXdraw merges graphics and text +======================================== - TeXdraw creates a box which is the same size as the graphic. The +TeXdraw creates a box which is the same size as the graphic. The printer driver will place the PostScript graphic into this space. Any TeX text generated by the TeXdraw commands will be superimposed on this graphic. - The LaTeX2e front-end for TeXdraw is enabled by including the -`texdraw' package. The `texdraw' package automatically invokes the -standard `graphics' package distributed with LaTeX2e. The `graphics' -package has support for a number of different printer drivers, -including a number for PostScript printers. Any options to the -`texdraw' package are passed on to the `graphics' package. Such an -option can be used to select a driver other than the default one. + The LaTeX2e front-end for TeXdraw is enabled by including the +'texdraw' package. The 'texdraw' package automatically invokes the +standard 'graphics' package distributed with LaTeX2e. The 'graphics' +package has support for a number of different printer drivers, including +a number for PostScript printers. Any options to the 'texdraw' package +are passed on to the 'graphics' package. Such an option can be used to +select a driver other than the default one. - Within the `graphics' package, the driver option is used to select -definitions for the low-level macros which generate the `\special' + Within the 'graphics' package, the driver option is used to select +definitions for the low-level macros which generate the '\special' commands needed to request insertion of a graphics file and to rotate -text.(1) TeXdraw uses the user-level macros defined by the `graphics' +text.(1) TeXdraw uses the user-level macros defined by the 'graphics' package (*note PostScript printer drivers::). When not used with the LaTeX2e front-end, TeXdraw defines versions of these macros that are -suitable for use with the `dvips' printer driver. +suitable for use with the 'dvips' printer driver. - ---------- Footnotes ---------- + ---------- Footnotes ---------- - (1) Not all PostScript drivers support text rotation. + (1) Not all PostScript drivers support text rotation. File: texdraw, Node: PostScript Commands, Next: TeXdraw Toolbox, Prev: More Details, Up: Top -PostScript Commands -******************* +Appendix A PostScript Commands +****************************** - This appendix describes a set of macros for accessing some of the +This appendix describes a set of macros for accessing some of the PostScript builtin functions. Each of these macros issues a single PostScript command. The extra services provided by TeXdraw are the interpretation of coordinates in user units relative to the current @@ -1357,92 +1324,86 @@ drawing segment and the writing of a pending TeXdraw move to the PostScript file. This last operation establishes the current point in PostScript. The user of these commands should be familiar with the concepts of path construction and filling in PostScript. Further -details on the PostScript functions used can found in the `PostScript +details on the PostScript functions used can found in the 'PostScript Language Reference Manual, Second Edition', Adobe Systems, Addison-Wesley, 1990. - These macros are distributed in file `txdps.tex'. + These macros are distributed in file 'txdps.tex'. - The `\PSsetlinecap' and `\PSsetlinejoin' commands control the way + The '\PSsetlinecap' and '\PSsetlinejoin' commands control the way line ends and line joins are rendered. The default values set by TeXdraw (round caps and round join) are appropriate for most drawings. Changes to these parameters apply to the current and subsequent paths. -`\PSsetlinecap TYPE' - Set the line cap parameter. The value `0' gives a butt cap; `1' - gives a round cap; and `2' gives a projecting square cap. The +'\PSsetlinecap TYPE' + Set the line cap parameter. The value '0' gives a butt cap; '1' + gives a round cap; and '2' gives a projecting square cap. The initial value is corresponds to a round cap. +'\PSsetlinejoin TYPE' + Set the line join parameter. The value '0' gives a miter join; '1' + gives a round join; and '2' gives a bevel join. The initial value + corresponds to a round join. -`\PSsetlinejoin TYPE' - Set the line join parameter. The value `0' gives a miter join; - `1' gives a round join; and `2' gives a bevel join. The initial - value corresponds to a round join. - - PostScript paths and fill operations can be controlled by a number of + PostScript paths and fill operations can be controlled by a number of functions. By design, TeXdraw always maintains a defined PostScript current point. Some of the following macros cause the PostScript current point to become undefined. The PostScript current point must be -set again (say with a `\PSmoveto' command) before invoking basic -TeXdraw commands. -`\PSstroke' +set again (say with a '\PSmoveto' command) before invoking basic TeXdraw +commands. +'\PSstroke' Stroke a PostScript path. The current path is stroked with the - current gray level (set with `\setgray') and the current line - pattern (set with `\lpatt'). The PostScript current point becomes + current gray level (set with '\setgray') and the current line + pattern (set with '\lpatt'). The PostScript current point becomes undefined. - -`\PSnewpath' +'\PSnewpath' Establish a new path. The PostScript current point becomes undefined. - -`\PSclosepath' +'\PSclosepath' Close a subpath. A new subpath is started. - -`\PSfill' +'\PSfill' Fill a region defined by a path. Each subpath is closed and the enclosed regions painted with the current gray level. The PostScript current point becomes undefined. The gray level can be - set with the TeXdraw command `\setgray'. + set with the TeXdraw command '\setgray'. - The following line commands interpret coordinates relative to the + The following line commands interpret coordinates relative to the current TeXdraw scaling and drawing segment. The specified coordinate affects the drawing size as determined by TeXdraw. -`\PSlineto (X Y)' +'\PSlineto (X Y)' Add a line segment to the current path. This command is identical - to the TeXdraw command `\lvec'. The PostScript current point must + to the TeXdraw command '\lvec'. The PostScript current point must be defined before this command is issued. - -`\PSmoveto (X Y)' - Move to the coordinate specified by `(X Y)'. The PostScript +'\PSmoveto (X Y)' + Move to the coordinate specified by '(X Y)'. The PostScript current point becomes defined. - The following macros provide access to the general arc commands in + The following macros provide access to the general arc commands in PostScript. The coordinates are interpreted relative to the current TeXdraw scaling and drawing segment. The specified coordinate affects the drawing size as determined by TeXdraw. -`\PSarc r:RADIUS sd:START-ANGLE ed:END-ANGLE (X Y)' +'\PSarc r:RADIUS sd:START-ANGLE ed:END-ANGLE (X Y)' Draw a counterclockwise arc. The center of the arc is at the given position. The radius is specified by RADIUS. The start and end - angles (in degrees) are specified by START-ANGLE and END-ANGLE. - If the PostScript current point is defined, this command also - draws the line from the current point to the beginning of the arc. - The line and arc become part of the current path. The current - point becomes defined. - -`\PSarcn r:RADIUS sd:START-ANGLE ed:END-ANGLE (X Y)' + angles (in degrees) are specified by START-ANGLE and END-ANGLE. If + the PostScript current point is defined, this command also draws + the line from the current point to the beginning of the arc. The + line and arc become part of the current path. The current point + becomes defined. +'\PSarcn r:RADIUS sd:START-ANGLE ed:END-ANGLE (X Y)' Draw a clockwise arc. The center of the arc is at the given position. The radius is specified by RADIUS. The start and end - angles (in degrees) are specified by START-ANGLE and END-ANGLE. - If the PostScript current point is defined, this command also - draws the line from the current point to the beginning of the arc. - The line and arc become part of the current path. The current - point becomes defined. + angles (in degrees) are specified by START-ANGLE and END-ANGLE. If + the PostScript current point is defined, this command also draws + the line from the current point to the beginning of the arc. The + line and arc become part of the current path. The current point + becomes defined. - The macro `\writeps' provides the general facility to write arbitrary + The macro '\writeps' provides the general facility to write arbitrary PostScript commands to the PostScript file. This macro is used by the preceding commands and by the TeXdraw commands themselves. This facility has to be used with care since changes in position or scaling resulting from the PostScript commands are not known to TeXdraw. -`\writeps {<PS-COMMANDS>}' +'\writeps {<PS-COMMANDS>}' Write PostScript commands to the intermediate PostScript file. Before the commands are inserted, any pending TeXdraw move is written to the PostScript file. The PostScript scaling gives 300 @@ -1451,14 +1412,14 @@ resulting from the PostScript commands are not known to TeXdraw. File: texdraw, Node: TeXdraw Toolbox, Next: Examples, Prev: PostScript Commands, Up: Top -TeXdraw Toolbox -*************** +Appendix B TeXdraw Toolbox +************************** - This appendix describes some of the macros supplied with TeXdraw -which can be used to define additional commands for creating drawings. -The macros described here work in the user specified coordinate system. +This appendix describes some of the macros supplied with TeXdraw which +can be used to define additional commands for creating drawings. The +macros described here work in the user specified coordinate system. Some of these toolbox macros are used by the TeXdraw commands -themselves, others are supplied in an auxiliary file `txdtools.tex'. +themselves, others are supplied in an auxiliary file 'txdtools.tex'. * Menu: @@ -1469,85 +1430,80 @@ themselves, others are supplied in an auxiliary file `txdtools.tex'. File: texdraw, Node: Coordinate parsing, Next: Real arithmetic, Up: TeXdraw Toolbox -Coordinate parsing -================== +B.1 Coordinate parsing +====================== - The coordinate parsing macro `\getpos' is useful for creating new +The coordinate parsing macro '\getpos' is useful for creating new commands. This macro takes care of stripping leading and trailing blanks from coordinates specified between parentheses. In addition, symbolic coordinates are translated to the corresponding relative coordinate using the segment offset and scaling in effect. - The macro `\currentpos' returns the relative coordinates of the + The macro '\currentpos' returns the relative coordinates of the current position. The returned values are relative to the current -segment and the current scaling. The macro `\cossin' returns the +segment and the current scaling. The macro '\cossin' returns the real-valued cosine and sine of the direction of the line joining two -points. The macro `\vectlen' returns the length of a vector. The +points. The macro '\vectlen' returns the length of a vector. The results appear as the value of user supplied macro names. -`\getpos (X Y)\MX\MY' - Decode coordinate values. The coordinates specified by `(X Y)' are - decoded. Symbolic coordinates are translated to the corresponding +'\getpos (X Y)\MX\MY' + Decode coordinate values. The coordinates specified by '(X Y)' are + decoded. Symbolic coordinates are translated to the corresponding relative coordinate using the current segment offset and scaling. The resulting character strings representing the real-valued - coordinates are assigned to the macros specified by `\MX' and - `\MY'. - -`\currentpos \MX\MY' + coordinates are assigned to the macros specified by '\MX' and + '\MY'. +'\currentpos \MX\MY' Return the coordinates of the current position. The coordinates are relative to the current segment offset and scaling. The resulting character strings representing the real-valued - coordinates are assigned to the macros specified by `\MX' and - `\MY'. - -`\cossin (X1 Y1)(X2 Y2)\COSA\SINA' + coordinates are assigned to the macros specified by '\MX' and + '\MY'. +'\cossin (X1 Y1)(X2 Y2)\COSA\SINA' Return the cosine and sine of the direction of a vector joining two points. The cosine and sine of the angle of the vector which goes - from `(X1 Y1)' to `(X2 Y2)'. The character strings representing + from '(X1 Y1)' to '(X2 Y2)'. The character strings representing these real-valued quantities are assigned to the macros specified - by `\COSA' and `\SINA'. - -`\vectlen (X1 Y1)(X2 Y2)\LEN' + by '\COSA' and '\SINA'. +'\vectlen (X1 Y1)(X2 Y2)\LEN' Return the length of a vector joining two points. The length of the vector is relative to the current scaling. The character - string representing the real-valued length is assigned to the - macro specified by `\LEN'. + string representing the real-valued length is assigned to the macro + specified by '\LEN'. File: texdraw, Node: Real arithmetic, Next: Arrow curve, Prev: Coordinate parsing, Up: TeXdraw Toolbox -Real arithmetic -=============== +B.2 Real arithmetic +=================== - The TeXdraw toolbox supplies macros to perform real arithmetic on +The TeXdraw toolbox supplies macros to perform real arithmetic on coordinate values. The result appears as the value of a user supplied macro name. -`\realadd {VALUE1} {VALUE2} \SUM' +'\realadd {VALUE1} {VALUE2} \SUM' Add two real quantities, assigning the resultant character string - representing the sum to the macro `\SUM'. - -`\realmult {VALUE1} {VALUE2} \PROD' + representing the sum to the macro '\SUM'. +'\realmult {VALUE1} {VALUE2} \PROD' Multiply two real quantities, assigning the resultant character - string representing the product to the macro `\PROD'. - -`\realdiv {VALUE1} {VALUE2} \RESULT' + string representing the product to the macro '\PROD'. +'\realdiv {VALUE1} {VALUE2} \RESULT' Divide two real quantities, assigning the resultant character string representing the result of VALUE1/VALUE2 to the macro - `\RESULT'. + '\RESULT'. File: texdraw, Node: Arrow curve, Prev: Real arithmetic, Up: TeXdraw Toolbox -Arrow curve -=========== +B.3 Arrow curve +=============== - This example illustrates the use of the TeXdraw toolbox routines to -do computations with the coordinates. The problem will be tackled in -two parts. First, we will produce a macro to place an arrowhead on a -Bezier curve. Then given this macro, we will produce a macro which can -draw a "wiggly" line from the current position to a given coordinate. +This example illustrates the use of the TeXdraw toolbox routines to do +computations with the coordinates. The problem will be tackled in two +parts. First, we will produce a macro to place an arrowhead on a Bezier +curve. Then given this macro, we will produce a macro which can draw a +"wiggly" line from the current position to a given coordinate. - The first macro, `\cavec', uses the `\cossin' command to determine + The first macro, '\cavec', uses the '\cossin' command to determine the the cosine and sine of the angle of the line joining the second control point to the end point of the Bezier curve. Recall that the Bezier curve is tangent to this line at the end point. After drawing @@ -1565,24 +1521,24 @@ mostly arrowhead, with little or no tail. \move ({-\cosa} -\sina) \avec (0 0) \esegment} - Note the use of macros as arguments to a `\move' command. Minus + Note the use of macros as arguments to a '\move' command. Minus signs are put in front of the macros. However, the value of the macro -`\cosa' or `\sina' could be negative. Fortunately, TeX accepts two +'\cosa' or '\sina' could be negative. Fortunately, TeX accepts two minus signs in a row and interprets the result as positive. Note that -the `\rmove (0 0)' command before the beginning of the segment ensures +the '\rmove (0 0)' command before the beginning of the segment ensures that the Bezier curve is stroked before the arrowhead is drawn. - The second macro `\caw' builds on `\cavec'. The goal is to produce a + The second macro '\caw' builds on '\cavec'. The goal is to produce a wiggly vector that can be used as a pointer in a drawing. Consider the following symmetrical normalized Bezier curve. \centertexdraw{ \move (0 0) \cavec (1.4 0.1)(-0.4 -0.1)(1 0) } - This curve has the appropriate wiggle. Now we want to be able to draw -this curve, appropriately scaled and rotated. The macro `\caw' needs -to do computations on the coordinates. First, `\caw' uses the macros -`\getpos' and `\currentpos' to get the positions of the end and start -of the curve. Next, the length of the vector is calculated using the -macro `\vectlen'. A local macro `\rotatecoord' is used to rotate a + This curve has the appropriate wiggle. Now we want to be able to +draw this curve, appropriately scaled and rotated. The macro '\caw' +needs to do computations on the coordinates. First, '\caw' uses the +macros '\getpos' and '\currentpos' to get the positions of the end and +start of the curve. Next, the length of the vector is calculated using +the macro '\vectlen'. A local macro '\rotatecoord' is used to rotate a coordinate pair about the origin, using the cosine and sine of the rotation angle. The vector length is used to scale the normalized curve. The remaining code draws the rotated, normalized curve. @@ -1590,14 +1546,14 @@ curve. The remaining code draws the rotated, normalized curve. \def\caw (#1 #2){ \currentpos \xa\ya \cossin ({\xa} \ya)(#1 #2)\cosa\sina - + % The nominal wiggly curve is (0 0) (1+dx dy) (-dx -dy) (1 0) % Find the rotated offset (dx dy) -> (du dv) \rotatecoord (0.4 0.1)\cosa\sina \du\dv - + % calculate the length of the vector \vectlen ({\xa} \ya)(#1 #2)\len - + % draw the curve in normalized units \bsegment \setsegscale {\len} @@ -1605,7 +1561,7 @@ curve. The remaining code draws the rotated, normalized curve. \cavec ({\tmpa} \tmpb)({-\du} -\dv)({\cosa} \sina) \esegment \move (#1 #2)} - + % rotate a coordinate (x y) % arguments: (x y) cosa sina x' y' % x' = cosa * x - sina * y; y' = sina * x + cosa * y @@ -1616,7 +1572,7 @@ curve. The remaining code draws the rotated, normalized curve. \realmult \xarg {#4} \tmpa \realmult \yarg {#3} \tmpb \realadd \tmpa \tmpb #6} - Finally, the new macro can be used as follows. + Finally, the new macro can be used as follows. \centertexdraw{ \arrowheadtype t:W \move (0 0) @@ -1624,20 +1580,20 @@ curve. The remaining code draws the rotated, normalized curve. \move (1 0) \caw (1 1) \htext{tip at \tt (1 1)} \move (1 0) \caw (2 1) \htext{tip at \tt (2 1)} \move (1 0) \caw (2 0) \htext{tip at \tt (2 0)} - + } - Note that the Bezier curve in the macro `\cavec' lies below the -arrowhead. The example then draws an arrowhead of type `W' to erase -the part of the line below the arrowhead. + Note that the Bezier curve in the macro '\cavec' lies below the +arrowhead. The example then draws an arrowhead of type 'W' to erase the +part of the line below the arrowhead. File: texdraw, Node: Examples, Next: Command Listing, Prev: TeXdraw Toolbox, Up: Top -Examples -******** +Appendix C Examples +******************* - This appendix shows examples of the use of TeXdraw. +This appendix shows examples of the use of TeXdraw. * Menu: @@ -1648,20 +1604,20 @@ Examples File: texdraw, Node: Block diagram, Next: Filter response graph, Up: Examples -Block diagram of a lattice filter -================================= +C.1 Block diagram of a lattice filter +===================================== - The block diagram of a lattice filter uses a library of extended +The block diagram of a lattice filter uses a library of extended commands built from the basic TeXdraw commands. - The block diagram uses a "delay" block. This is defined as a segment + The block diagram uses a "delay" block. This is defined as a segment which leaves the current position at the end of this block. A second -macro, `\bdot', draws a "big" dot which is used to mark junctions of -lines. The `\Ttext' command centers text above a given point. The +macro, '\bdot', draws a "big" dot which is used to mark junctions of +lines. The '\Ttext' command centers text above a given point. The offset to position the text is local to a segment, resulting in no change to the current point. Similar macros to position text below a -point (`\Btext'), to the left of a point (`\Ltext') and to the right of -a point (`\Rtext') are used in the final drawing. +point ('\Btext'), to the left of a point ('\Ltext') and to the right of +a point ('\Rtext') are used in the final drawing. \def\delay {\bsegment \setsegscale 0.3 \lvec (0 +0.5) \lvec (1 +0.5) \lvec (1 -0.5) @@ -1675,16 +1631,16 @@ a point (`\Rtext') are used in the final drawing. \textref h:C v:B \htext (0 +0.06){#1} \esegment} - Several of the block diagram elements scale with the size of the + Several of the block diagram elements scale with the size of the summing nodes. The radius of the circles for the summing nodes is -defined as the macro `\cradius'. The summing nodes will have enclosed +defined as the macro '\cradius'. The summing nodes will have enclosed plus signs, appropriately scaled. The plus sign is drawn by the macro -`\pluss'. The macro `\pcir' draws both the circle and the plus sign. -The incoming lines to a summing node will be labelled with plus or -minus signs (characters this time), placed at the appropriate position -with respect to the center of the summing node. These positions are -given in terms of compass directions. The macro `\putwnw' places text -west by north-west relative to the center of the summing node. +'\pluss'. The macro '\pcir' draws both the circle and the plus sign. +The incoming lines to a summing node will be labelled with plus or minus +signs (characters this time), placed at the appropriate position with +respect to the center of the summing node. These positions are given in +terms of compass directions. The macro '\putwnw' places text west by +north-west relative to the center of the summing node. \def\cradius {0.08} \def\pluss {\bsegment \setsegscale {\cradius} @@ -1698,20 +1654,20 @@ west by north-west relative to the center of the summing node. \esegment} \def\putwnw #1{\puttext (-1.7 +1.2){#1}} - The block diagram has vectors arriving and departing from the summing + The block diagram has vectors arriving and departing from the summing nodes (circles). One could calculate the points of intersection of the -lines with the circles, and then enter the values into the TeXdraw -code. However, in this example, we implement an automated procedure. -Two macros are needed, an arrow vector to a circle (`\avectoc') and an -arrow vector leaving from a circle (`\avecfrc'). The macros will -calculate the point of intersection with the circle and start or end -the vector at the intersection point. - - The arrow macros use scaling and relative positioning inside of a -drawing segment. In the case of the macro `\avectoc', a move is made -to the final point (center of the circle), then within a drawing -segment, a scaled move is made back towards the initial point to -determine the intersection point with the circle. +lines with the circles, and then enter the values into the TeXdraw code. +However, in this example, we implement an automated procedure. Two +macros are needed, an arrow vector to a circle ('\avectoc') and an arrow +vector leaving from a circle ('\avecfrc'). The macros will calculate +the point of intersection with the circle and start or end the vector at +the intersection point. + + The arrow macros use scaling and relative positioning inside of a +drawing segment. In the case of the macro '\avectoc', a move is made to +the final point (center of the circle), then within a drawing segment, a +scaled move is made back towards the initial point to determine the +intersection point with the circle. \def\avectoc (#1 #2){\currentpos \xa\ya \cossin ({\xa} \ya)(#1 #2)\cosa\sina @@ -1734,7 +1690,7 @@ determine the intersection point with the circle. \move (*ex *ey) \avec (#1 #2)} - Having defined these macros, we are ready to draw the block diagram. + Having defined these macros, we are ready to draw the block diagram. The first and last sections of the lattice filter are very similar, differing mainly in the text labels. With more effort, code could be shared between the commands used to draw these blocks. @@ -1742,9 +1698,9 @@ shared between the commands used to draw these blocks. \drawdim in \arrowheadtype t:F \arrowheadsize l:0.08 w:0.04 \def\pl {$\scriptscriptstyle +$} \def\mn {$\scriptscriptstyle -$} - + \move (0 +0.63) \move (0 -0.60) \move (0 0) % compensate for the text size - + % Input to the first stage \bsegment \Ltext{$x(n)$} @@ -1752,7 +1708,7 @@ shared between the commands used to draw these blocks. \savepos (0.3 0)(*ex *ey) \esegment \move (*ex *ey) - + % first lattice stage \bsegment \move (0 +0.4) \avectoc (1.7 +0.4) @@ -1772,7 +1728,7 @@ shared between the commands used to draw these blocks. \savepos (2.1 0)(*ex *ey) \esegment \move (*ex *ey) - + % center section \bsegment \textref h:C v:C \htext (0.3 +0.4){$\cdots$} @@ -1780,7 +1736,7 @@ shared between the commands used to draw these blocks. \savepos (0.6 0)(*ex *ey) \esegment \move (*ex *ey) - + % last lattice stage \bsegment \move (0 +0.4) \avectoc (1.7 +0.4) @@ -1800,21 +1756,21 @@ shared between the commands used to draw these blocks. \esegment } - The macros used in this example are similar to the block diagram -macros defined in the file `blockdiagram.tex'. + The macros used in this example are similar to the block diagram +macros defined in the file 'blockdiagram.tex'. File: texdraw, Node: Filter response graph, Next: Geometric construction, Prev: Block diagram, Up: Examples -Filter response graph -===================== +C.2 Filter response graph +========================= - This example shows the response of a canonical filter. TeXdraw is -not well suited for general purpose graphing -- it has no coordinate +This example shows the response of a canonical filter. TeXdraw is not +well suited for general purpose graphing -- it has no coordinate translation facility nor does it have separate X and Y scaling. Nonetheless, for certain simple graphs, TeXdraw is adequate. - In this example, macro `\ticklab' places a labelled axis tick at a + In this example, macro '\ticklab' places a labelled axis tick at a given position. The data is specified in a straightforward manner, having been scaled beforehand to give the desired aspect ratio for the graph. @@ -1830,9 +1786,9 @@ graph. \def\Rtext #1{\bsegment \textref h:L v:C \htext (+0.08 0){#1} \esegment} - + \move (2.4 -0.3) % move to set the size - + \move (0 0) % Axes \avec (0 +1.4) @@ -1841,7 +1797,7 @@ graph. \ticklab (0.8 0) {$\ds {\pi \over 2N} $} \ticklab (1.2 0) {$\omega_s$} \ticklab (1.6 0) {$\ds {\pi \over N} $} - + \linewd 0.025 \move (0 1) \lvec (0.4 1) @@ -1860,10 +1816,10 @@ graph. File: texdraw, Node: Geometric construction, Prev: Filter response graph, Up: Examples -Geometric construction -====================== +C.3 Geometric construction +========================== - This example shows a geometric construction which places an ellipse +This example shows a geometric construction which places an ellipse tangent to an enclosing circle. The size of the ellipse is determined from geometric considerations. Macros are used to modularize the code. The example alters the unit scale factor. This allows the drawing to be @@ -1873,7 +1829,7 @@ carried out in units normalized to the radius of the circle. \arrowheadtype t:V \arrowheadsize l:0.08 w:0.04 \linewd 0.01 \setunitscale 1.5 % circle will have radius 1.5 inches - + \def\Btext #1{\bsegment \textref h:C v:T \htext (0 -0.04){#1} \esegment} @@ -1900,16 +1856,16 @@ carried out in units normalized to the radius of the circle. \relsegscale 0.5 \move (0 {#1}) \Ltext {#2} \esegment} - + \lcir r:1 % circle \move (-1.05 0) \lvec ( 1.05 0) % axes \move (0 -1.05) \lvec (0 1.05) - + \move (0 0) \lvec (0.707 0.707) \bdot \rmove (0.02 0.02) \textref h:L v:B \htext {X} \move (0.707 -0.707) \bdot \textref h:R v:T \htext(-0.02 -0.02){O} - + \move (0.5 0) % center of ellipse \bsegment \lellip rx:0.435 ry:0.804 @@ -1922,259 +1878,257 @@ carried out in units normalized to the radius of the circle. File: texdraw, Node: Command Listing, Next: Command Index, Prev: Examples, Up: Top -Alphabetic listing of commands -****************************** +Appendix D Alphabetic listing of commands +***************************************** -`\arrowheadsize l:LENGTH w:WIDTH' +'\arrowheadsize l:LENGTH w:WIDTH' Set the arrowhead size to be LENGTH units long and WIDTH units wide. The width is measured across the "base" of the arrowhead. The initial arrowhead size has a LENGTH of 0.16 inches and a WIDTH of 0.08 inches. -`\arrowheadtype t:TYPE' - Set the arrowhead type to TYPE, where TYPE is one of `F', `T', - `W', `V', or `H'. There are two kinds of arrowheads. The first - kind is a triangle. There are 3 variants: type `T' is an empty - triangle, type `F' is a filled triangle (using the current gray - level for lines), type `W' is a triangle filled with white. The - second kind of arrowhead is an open ended Vee. There are 2 - variants: type `V' has the stem continue to the tip, type `H' has - the stem stop at the base of the arrowhead. The initial arrowhead - type is `T'. - -`\avec (X Y)' - Draw a line with an arrowhead from the current position to `(X - Y)'. The new current position is `(X Y)'. The arrowhead is - aligned with the line, with the tip at `(X Y)'. - -`\begin{texdraw}' +'\arrowheadtype t:TYPE' + Set the arrowhead type to TYPE, where TYPE is one of 'F', 'T', 'W', + 'V', or 'H'. There are two kinds of arrowheads. The first kind is + a triangle. There are 3 variants: type 'T' is an empty triangle, + type 'F' is a filled triangle (using the current gray level for + lines), type 'W' is a triangle filled with white. The second kind + of arrowhead is an open ended Vee. There are 2 variants: type 'V' + has the stem continue to the tip, type 'H' has the stem stop at the + base of the arrowhead. The initial arrowhead type is 'T'. + +'\avec (X Y)' + Draw a line with an arrowhead from the current position to '(X Y)'. + The new current position is '(X Y)'. The arrowhead is aligned with + the line, with the tip at '(X Y)'. + +'\begin{texdraw}' Start a TeXdraw drawing. The drawing is terminated with an - `\end{texdraw}' command. This command is for use with LaTeX. + '\end{texdraw}' command. This command is for use with LaTeX. -`\bsegment' +'\bsegment' Start a drawing segment. The coordinate system is shifted such - that the current position corresponds to the coordinate `(0 0)'. + that the current position corresponds to the coordinate '(0 0)'. Changes to scaling, position and line parameters stay local to the drawing segment. -`\btexdraw' +'\btexdraw' Start a TeXdraw drawing. The drawing is terminated with an - `\etexdraw' command. + '\etexdraw' command. -`\centertexdraw { ... }' - Center a TeXdraw box. The argument contains TeXdraw commands. - The resulting box has the horizontal size `\hsize' and height equal - to the height of the drawing. +'\centertexdraw { ... }' + Center a TeXdraw box. The argument contains TeXdraw commands. The + resulting box has the horizontal size '\hsize' and height equal to + the height of the drawing. -`\clvec (X1 Y1)(X2 Y2)(X3 Y3)' +'\clvec (X1 Y1)(X2 Y2)(X3 Y3)' Draw a Bezier curve from the current position to the coordinate - `(X3 Y3)' which becomes the new current position. The coordinates - `(X1 Y1)' and `(X2 Y2)' serve as control points for the curve. + '(X3 Y3)' which becomes the new current position. The coordinates + '(X1 Y1)' and '(X2 Y2)' serve as control points for the curve. Only the last coordinate given is used to update the size of the drawing. -`\drawbb' +'\drawbb' Draw a ruled box around the effective size of a drawing produced by TeXdraw commands. -`\drawdim DIM' +'\drawdim DIM' Set the units to DIM. The argument DIM can be any valid TeX - dimension unit. The units are used to interpret coordinate - values. Examples of valid units: `cm', `mm', `in', `pt', and `bp'. + dimension unit. The units are used to interpret coordinate values. + Examples of valid units: 'cm', 'mm', 'in', 'pt', and 'bp'. -`\end{texdraw}' - End a TeXdraw drawing started with a `\begin{texdraw}' command. +'\end{texdraw}' + End a TeXdraw drawing started with a '\begin{texdraw}' command. The resulting TeXdraw drawing is placed in a box with height equal to the height of the drawing and width equal to the width of the drawing. The depth of the box is zero. This command is for use with LaTeX. -`\esegment' +'\esegment' End a drawing segment. The current position in effect before the - corresponding `\bsegment' command is restored. The scaling and + corresponding '\bsegment' command is restored. The scaling and line parameter values revert to those in effect before the - corresponding `\bsegment' was invoked. + corresponding '\bsegment' was invoked. -`\etexdraw' - End a TeXdraw drawing started with a `\btexdraw' command. The +'\etexdraw' + End a TeXdraw drawing started with a '\btexdraw' command. The resulting TeXdraw drawing is placed in a box with height equal to the height of the drawing and width equal to the width of the drawing. The depth of the box is zero. -`\everytexdraw { ... }' +'\everytexdraw { ... }' Specify TeXdraw commands to be executed at the beginning of every TeXdraw drawing. -`\fcir f:LEVEL r:RADIUS' +'\fcir f:LEVEL r:RADIUS' Draw a filled circle with center at the current position. The - radius is specified by RADIUS. The circle is painted with the - gray level specified by LEVEL. A gray level of 1 corresponds to - white, with decreasing values getting darker. The level 0 is full - black. This command does not draw a line along the circumference. - The drawing size is increased if necessary to contain the circle. + radius is specified by RADIUS. The circle is painted with the gray + level specified by LEVEL. A gray level of 1 corresponds to white, + with decreasing values getting darker. The level 0 is full black. + This command does not draw a line along the circumference. The + drawing size is increased if necessary to contain the circle. -`\fellip f:LEVEL rx:X-RADIUS ry:Y-RADIUS' +'\fellip f:LEVEL rx:X-RADIUS ry:Y-RADIUS' Draw a filled ellipse with center at the current position. The radius in the X direction is specified by X-RADIUS. The radius in the Y direction is specified by Y-RADIUS. The ellipse is painted with the gray level specified by LEVEL. A gray level of 1 corresponds to white, with decreasing values getting darker. The - level 0 is full black. This command does not draw a line along - the boundary of the ellipse. The drawing size is increased if + level 0 is full black. This command does not draw a line along the + boundary of the ellipse. The drawing size is increased if necessary to contain the ellipse. -`\htext (X Y){TEXT}' -`\htext {TEXT}' +'\htext (X Y){TEXT}' +'\htext {TEXT}' The first form of this command places the TeX text TEXT - horizontally with the text reference point at the coordinate `(X - Y)'. The new current position is `(X Y)'. The second form of - this command places the TeX text TEXT horizontally with the text + horizontally with the text reference point at the coordinate '(X + Y)'. The new current position is '(X Y)'. The second form of this + command places the TeX text TEXT horizontally with the text reference point at the current position. The text reference point - is set with the `\textref' command. + is set with the '\textref' command. -`\ifill f:LEVEL' +'\ifill f:LEVEL' Close the current path and paint the interior of the region with gray level LEVEL. The line around the path is not drawn. Gray levels are real values from 0 (black) through intermediate values (grays) to 1 (white). -`\larc r:RADIUS sd:START-ANGLE ed:END-ANGLE' +'\larc r:RADIUS sd:START-ANGLE ed:END-ANGLE' Draw a counterclockwise arc. The center of the arc is at the current position. The radius is specified by RADIUS. The start and end angles (in degrees) are specified by START-ANGLE and END-ANGLE. This command does not affect the limits (size) of the drawing. -`\lcir r:RADIUS' +'\lcir r:RADIUS' Draw a circle with center at the current position. The radius is specified by RADIUS. This command draws a line along the circumference of the circle. The drawing size is increased if necessary to contain the circle. -`\lellip rx:X-RADIUS ry:Y-RADIUS' - Draw an ellipse with center at the current position. The radius - in the X direction is specified by X-RADIUS. The radius in the Y +'\lellip rx:X-RADIUS ry:Y-RADIUS' + Draw an ellipse with center at the current position. The radius in + the X direction is specified by X-RADIUS. The radius in the Y direction is specified by Y-RADIUS. The drawing size is increased if necessary to contain the ellipse. -`\lfill f:LEVEL' +'\lfill f:LEVEL' + Close the current path, draw the line around the path using the current grey level for lines and paint the interior of the region with specified gray level LEVEL. Gray levels are real values from 0 (black) through intermediate values (grays) to 1 (white). -`\linewd WIDTH' +'\linewd WIDTH' Set the line width to WIDTH units. Initially WIDTH is 0.01 inches (corresponding to 3 pixels at 300 pixels to the inch). -`\lpatt (PATTERN)' - Set lines to have the pattern `(PATTERN)'. A pattern is a - sequence of on/off lengths separated by blanks and enclosed in - parentheses. The lengths alternately specify the length of a dash - and the length of a gap between dashes. Each length is - interpreted using the current scaling and drawing units. The - pattern is used cyclically. The empty pattern signifies a solid - line. The initial line pattern is a solid line, corresponding to - the empty pattern `\lpatt ()'. +'\lpatt (PATTERN)' + Set lines to have the pattern '(PATTERN)'. A pattern is a sequence + of on/off lengths separated by blanks and enclosed in parentheses. + The lengths alternately specify the length of a dash and the length + of a gap between dashes. Each length is interpreted using the + current scaling and drawing units. The pattern is used cyclically. + The empty pattern signifies a solid line. The initial line pattern + is a solid line, corresponding to the empty pattern '\lpatt ()'. -`\lvec (X Y)' - Draw a line from the current position to coordinate `(X Y)'. The - new current position is `(X Y)'. +'\lvec (X Y)' + Draw a line from the current position to coordinate '(X Y)'. The + new current position is '(X Y)'. -`\move (X Y)' - Move to coordinate `(X Y)'. The new current position is `(X Y)'. +'\move (X Y)' + Move to coordinate '(X Y)'. The new current position is '(X Y)'. -`\ravec (DX DY)' +'\ravec (DX DY)' Draw a line with an arrowhead from the current position, DX units in the X direction and Y units in the Y direction. The final position becomes the new current position. The arrowhead is aligned with the line, with the tip at the new current position. -`\relsegscale VALUE' +'\relsegscale VALUE' Adjust the segment scale factor by multiplying by VALUE. This has the effect of multiplying the current overall scale factor by the - same factor. The overall scaling factor is the product of the - unit scale factor and the segment scale factor. - -`\relunitscale VALUE' - Adjust the unit scale factor by multiplying by VALUE. This has - the effect of multiplying the overall scale factor by the same - factor. The overall scaling factor is the product of the unit + same factor. The overall scaling factor is the product of the unit scale factor and the segment scale factor. -`\rlvec (DX DY)' +'\relunitscale VALUE' + Adjust the unit scale factor by multiplying by VALUE. This has the + effect of multiplying the overall scale factor by the same factor. + The overall scaling factor is the product of the unit scale factor + and the segment scale factor. + +'\rlvec (DX DY)' Draw a line from the current position, DX units in the X direction and DY units in the Y direction. The final position becomes the new current position. -`\rmove (DX DY)' +'\rmove (DX DY)' Move from the current position, DX units in the X direction and DY units in the Y direction. The final position becomes the new current position. -`\rtext td:ANGLE (x y){TEXT}' -`\rtext td:ANGLE {TEXT}' - The first form of this command places the TeX text TEXT at an - angle with the text reference point at the coordinate `(X Y)'. - The new current position is `(X Y)'. The second form of this - command places the TeX text TEXT at an angle with the text - reference point at the current position. In both cases, the TeX - text is placed in a box and the box is rotated counterclockwise by - ANGLE degrees about the text reference point. The text reference - point is set with the `\textref' command. - -`\savecurrpos (*PX *PY)' +'\rtext td:ANGLE (x y){TEXT}' +'\rtext td:ANGLE {TEXT}' + The first form of this command places the TeX text TEXT at an angle + with the text reference point at the coordinate '(X Y)'. The new + current position is '(X Y)'. The second form of this command + places the TeX text TEXT at an angle with the text reference point + at the current position. In both cases, the TeX text is placed in + a box and the box is rotated counterclockwise by ANGLE degrees + about the text reference point. The text reference point is set + with the '\textref' command. + +'\savecurrpos (*PX *PY)' Save the current position as the absolute position referenced by - `(*PX *PY)'. + '(*PX *PY)'. -`\savepos (X Y)(*PX *PY)' - Save the coordinate position `(X Y)' as the absolute position - referenced by `(*PX *PY)'. The coordinate `(X Y)' is interpreted +'\savepos (X Y)(*PX *PY)' + Save the coordinate position '(X Y)' as the absolute position + referenced by '(*PX *PY)'. The coordinate '(X Y)' is interpreted in the normal fashion as a coordinate relative to the current segment, using the current scaling factors and drawing unit. -`\setgray LEVEL' +'\setgray LEVEL' Set the gray level of lines. Gray levels are real values from 0 (black) through intermediate values (gray) to 1 (white). The initial gray level is 0 corresponding to black. -`\setsegscale SCALE' +'\setsegscale SCALE' Set the segment scale factor. The argument SCALE is a real number - which is used to scale coordinate values. The overall scale + which is used to scale coordinate values. The overall scale factor + is the product of the unit scale factor and the segment scale + factor. + +'\setunitscale SCALE' + Set the unit scaling to SCALE. The argument SCALE is a real number + which is used to scale coordinate values. The overall scaling factor is the product of the unit scale factor and the segment scale factor. -`\setunitscale SCALE' - Set the unit scaling to SCALE. The argument SCALE is a real - number which is used to scale coordinate values. The overall - scaling factor is the product of the unit scale factor and the - segment scale factor. - -`\texdrawbox { ... }' +'\texdrawbox { ... }' Create a TeXdraw box. The argument contains TeXdraw commands. This macro returns a TeX box with height equal to the height of the drawing and width equal to the width of the drawing. The depth of the box is zero. -`\textref h:H-REF v:V-REF' +'\textref h:H-REF v:V-REF' Set the text reference point for subsequent text commands. The - horizontal reference point H-REF is one of `L', `C' or `R' (left, + horizontal reference point H-REF is one of 'L', 'C' or 'R' (left, center or right). The vertical reference point V-REF is one of - `T', `C' or `B' (top, center or bottom). For rotated text, the + 'T', 'C' or 'B' (top, center or bottom). For rotated text, the reference point is determined before rotation. The initial text - reference point corresponds to `\textref h:L v:B'. + reference point corresponds to '\textref h:L v:B'. -`\vtext (x y){TEXT}' -`\vtext {TEXT}' +'\vtext (x y){TEXT}' +'\vtext {TEXT}' The first form of this command places the TeX text TEXT vertically - with the text reference point at the coordinate `(X Y)'. The new - current position is `(X Y)'. The second form of this command + with the text reference point at the coordinate '(X Y)'. The new + current position is '(X Y)'. The second form of this command places the TeX text TEXT vertically with the text reference point at the current position. In both cases, the TeX text is placed in a box and the box is rotated counterclockwise by 90 degrees about - the text reference point. The text reference point is set with - the `\textref' command. - + the text reference point. The text reference point is set with the + '\textref' command. File: texdraw, Node: Command Index, Next: Concept Index, Prev: Command Listing, Up: Top @@ -2182,74 +2136,76 @@ File: texdraw, Node: Command Index, Next: Concept Index, Prev: Command Listin Command Index ************* + * Menu: -* \arc: Circles and arcs. -* \arrowheadsize: Line vectors. -* \arrowheadtype: Line vectors. -* \avec: Line vectors. -* \begin{texdraw}: Accessing TeXdraw. -* \bsegment: Drawing segments. -* \btexdraw: Accessing TeXdraw. -* \centertexdraw: Accessing TeXdraw. -* \clvec: Bezier curves. -* \cossin: Coordinate parsing. -* \currentpos: Coordinate parsing. -* \drawbb: Drawing size. +* \arc: Circles and arcs. (line 57) +* \arrowheadsize: Line vectors. (line 87) +* \arrowheadtype: Line vectors. (line 78) +* \avec: Line vectors. (line 34) +* \begin{texdraw}: Accessing TeXdraw. (line 91) +* \bsegment: Drawing segments. (line 14) +* \btexdraw: Accessing TeXdraw. (line 84) +* \centertexdraw: Accessing TeXdraw. (line 100) +* \clvec: Bezier curves. (line 20) +* \cossin: Coordinate parsing. (line 31) +* \currentpos: Coordinate parsing. (line 25) +* \drawbb: Drawing size. (line 32) * \drawdim: Coordinate specification. -* \end{texdraw}: Accessing TeXdraw. -* \esegment: Drawing segments. -* \etexdraw: Accessing TeXdraw. -* \everytexdraw: Accessing TeXdraw. -* \fcir: Circles and arcs. -* \fellip: Circles and arcs. -* \getpos: Coordinate parsing. -* \htext: TeX text. -* \ifill: Fill commands. -* \lcir: Circles and arcs. -* \lellip: Circles and arcs. -* \lfill: Fill commands. -* \linewd: Line vectors. -* \lvec: Line vectors. -* \move: Line vectors. -* \PSarc: PostScript Commands. -* \PSarcn: PostScript Commands. -* \PSclosepath: PostScript Commands. -* \PSfill: PostScript Commands. -* \PSlineto: PostScript Commands. -* \PSmoveto: PostScript Commands. -* \PSnewpath: PostScript Commands. -* \PSsetlinecap: PostScript Commands. -* \PSsetlinejoin: PostScript Commands. -* \PSstroke: PostScript Commands. -* \ravec: Line vectors. -* \realadd: Real arithmetic. -* \realdiv: Real arithmetic. -* \realmult: Real arithmetic. -* \relsegscale: Scaling coordinates. -* \relunitscale: Scaling coordinates. -* \rlvec: Line vectors. -* \rmove: Line vectors. -* \rtext: TeX text. -* \savecurrpos: Saving positions. -* \savepos: Saving positions. -* \setgray: Line vectors. -* \setsegscale: Scaling coordinates. -* \setunitscale: Scaling coordinates. -* \textref: TeX text. -* \vectlen: Coordinate parsing. -* \vtext: TeX text. -* \writeps: PostScript Commands. -* arc: PostScript Commands. -* arcn: PostScript Commands. -* closepath: PostScript Commands. -* fill: PostScript Commands. -* lineto: PostScript Commands. -* moveto: PostScript Commands. -* newpath: PostScript Commands. -* setlinecap: PostScript Commands. -* setlinejoin: PostScript Commands. -* stroke: PostScript Commands. + (line 14) +* \end{texdraw}: Accessing TeXdraw. (line 94) +* \esegment: Drawing segments. (line 18) +* \etexdraw: Accessing TeXdraw. (line 86) +* \everytexdraw: Accessing TeXdraw. (line 104) +* \fcir: Circles and arcs. (line 36) +* \fellip: Circles and arcs. (line 48) +* \getpos: Coordinate parsing. (line 19) +* \htext: TeX text. (line 14) +* \ifill: Fill commands. (line 24) +* \lcir: Circles and arcs. (line 32) +* \lellip: Circles and arcs. (line 43) +* \lfill: Fill commands. (line 20) +* \linewd: Line vectors. (line 64) +* \lvec: Line vectors. (line 31) +* \move: Line vectors. (line 30) +* \PSarc: PostScript Commands. (line 71) +* \PSarcn: PostScript Commands. (line 78) +* \PSclosepath: PostScript Commands. (line 47) +* \PSfill: PostScript Commands. (line 49) +* \PSlineto: PostScript Commands. (line 59) +* \PSmoveto: PostScript Commands. (line 62) +* \PSnewpath: PostScript Commands. (line 44) +* \PSsetlinecap: PostScript Commands. (line 25) +* \PSsetlinejoin: PostScript Commands. (line 28) +* \PSstroke: PostScript Commands. (line 40) +* \ravec: Line vectors. (line 53) +* \realadd: Real arithmetic. (line 9) +* \realdiv: Real arithmetic. (line 14) +* \realmult: Real arithmetic. (line 11) +* \relsegscale: Scaling coordinates. (line 34) +* \relunitscale: Scaling coordinates. (line 24) +* \rlvec: Line vectors. (line 49) +* \rmove: Line vectors. (line 46) +* \rtext: TeX text. (line 46) +* \savecurrpos: Saving positions. (line 15) +* \savepos: Saving positions. (line 17) +* \setgray: Line vectors. (line 74) +* \setsegscale: Scaling coordinates. (line 29) +* \setunitscale: Scaling coordinates. (line 20) +* \textref: TeX text. (line 60) +* \vectlen: Coordinate parsing. (line 37) +* \vtext: TeX text. (line 29) +* \writeps: PostScript Commands. (line 93) +* arc: PostScript Commands. (line 71) +* arcn: PostScript Commands. (line 78) +* closepath: PostScript Commands. (line 47) +* fill: PostScript Commands. (line 49) +* lineto: PostScript Commands. (line 59) +* moveto: PostScript Commands. (line 62) +* newpath: PostScript Commands. (line 44) +* setlinecap: PostScript Commands. (line 25) +* setlinejoin: PostScript Commands. (line 28) +* stroke: PostScript Commands. (line 40) File: texdraw, Node: Concept Index, Prev: Command Index, Up: Top @@ -2257,173 +2213,218 @@ File: texdraw, Node: Concept Index, Prev: Command Index, Up: Top Concept Index ************* + * Menu: -* accessing TeXdraw <1>: Accessing TeXdraw. -* accessing TeXdraw: Using TeXdraw with LaTeX. -* angle of a vector: Coordinate parsing. -* arcs <1>: Circles and arcs. -* arcs: PostScript Commands. -* arrowhead parameters: Line vectors. -* arrows: Line vectors. -* Bezier curves: Bezier curves. -* circles: Circles and arcs. -* command syntax: Command syntax. -* coordinate parsing: Coordinate parsing. +* accessing TeXdraw: Accessing TeXdraw. (line 6) +* accessing TeXdraw <1>: Using TeXdraw with LaTeX. + (line 6) +* angle of a vector: Coordinate parsing. (line 19) +* arcs: Circles and arcs. (line 6) +* arcs <1>: PostScript Commands. (line 70) +* arrowhead parameters: Line vectors. (line 64) +* arrows: Line vectors. (line 6) +* Bezier curves: Bezier curves. (line 6) +* circles: Circles and arcs. (line 6) +* command syntax: Command syntax. (line 6) +* coordinate parsing: Coordinate parsing. (line 19) * coordinate specification: Coordinate specification. -* coordinate, symbolic: Saving positions. -* coordinates: TeXdraw coordinates. -* cosine of a vector direction: Coordinate parsing. -* current position <1>: Coordinate parsing. -* current position <2>: Line vectors. -* current position: Initial current position. -* current position in PostScript: PostScript Commands. -* curves: Bezier curves. -* dashed lines: Line vectors. -* direction of a line: Coordinate parsing. -* distribution: Distribution. -* dotted lines: Line vectors. -* drawing segments: Drawing segments. -* dvi2ps printer driver: PostScript printer drivers. -* dvialw printer driver: PostScript printer drivers. -* dvilaser printer driver: PostScript printer drivers. -* dvips printer driver <1>: PostScript printer drivers. -* dvips printer driver <2>: Introduction. -* dvips printer driver: How TeXdraw merges graphics and text. -* dvipsone printer driver: PostScript printer drivers. -* dvitops printer driver: PostScript printer drivers. -* dviwindo printer driver: PostScript printer drivers. -* ellipses: Circles and arcs. + (line 6) +* coordinate, symbolic: Saving positions. (line 6) +* coordinates: TeXdraw coordinates. (line 6) +* cosine of a vector direction: Coordinate parsing. (line 19) +* current position: Line vectors. (line 6) +* current position <1>: Initial current position. + (line 6) +* current position <2>: Coordinate parsing. (line 19) +* current position in PostScript: PostScript Commands. (line 34) +* curves: Bezier curves. (line 6) +* dashed lines: Line vectors. (line 64) +* direction of a line: Coordinate parsing. (line 19) +* distribution: Distribution. (line 6) +* dotted lines: Line vectors. (line 64) +* drawing segments: Drawing segments. (line 6) +* 'dvi2ps' printer driver: PostScript printer drivers. + (line 13) +* 'dvialw' printer driver: PostScript printer drivers. + (line 13) +* 'dvilaser' printer driver: PostScript printer drivers. + (line 13) +* 'dvips' printer driver: Introduction. (line 25) +* 'dvips' printer driver <1>: PostScript printer drivers. + (line 13) +* 'dvips' printer driver <2>: How TeXdraw merges graphics and text. + (line 19) +* 'dvipsone' printer driver: PostScript printer drivers. + (line 13) +* 'dvitops' printer driver: PostScript printer drivers. + (line 13) +* 'dviwindo' printer driver: PostScript printer drivers. + (line 13) +* ellipses: Circles and arcs. (line 6) * Encapsulated PostScript File: Intermediate PostScript file. + (line 6) * errors while using TeXdraw: Errors while using TeXdraw. -* example, arrow curve: Arrow curve. -* example, block diagram: Examples. + (line 6) +* example, arrow curve: Arrow curve. (line 6) +* example, block diagram: Examples. (line 6) * example, circle and ellipse: Geometric construction. + (line 6) * example, graph: Filter response graph. + (line 6) * fill operations, interaction with drawing segments: Drawing paths. -* filled circles: Circles and arcs. -* filling regions <1>: PostScript Commands. -* filling regions: Fill commands. -* graphics package <1>: PostScript printer drivers. -* graphics package <2>: Accessing TeXdraw. -* graphics package <3>: How TeXdraw merges graphics and text. -* graphics package: Introduction. + (line 6) +* filled circles: Circles and arcs. (line 6) +* filling regions: Fill commands. (line 6) +* filling regions <1>: PostScript Commands. (line 34) +* 'graphics' package: Introduction. (line 25) +* 'graphics' package <1>: Accessing TeXdraw. (line 37) +* 'graphics' package <2>: PostScript printer drivers. + (line 6) +* 'graphics' package <3>: How TeXdraw merges graphics and text. + (line 11) * graphics placement: How TeXdraw merges graphics and text. -* gray levels for lines: Line vectors. -* implementation: Extending TeXdraw. + (line 6) +* gray levels for lines: Line vectors. (line 64) +* implementation: Extending TeXdraw. (line 6) * initial current position: Initial current position. -* invoking TeXdraw <1>: Accessing TeXdraw. -* invoking TeXdraw: Using TeXdraw with LaTeX. -* LaTeX <1>: Accessing TeXdraw. + (line 6) +* invoking TeXdraw: Accessing TeXdraw. (line 6) +* invoking TeXdraw <1>: Using TeXdraw with LaTeX. + (line 6) +* LaTeX: Introduction. (line 25) +* LaTeX <1>: Accessing TeXdraw. (line 6) * LaTeX <2>: Using TeXdraw with LaTeX. -* LaTeX: Introduction. -* length of a vector: Coordinate parsing. -* line cap: PostScript Commands. -* line join: PostScript Commands. -* line width: Line vectors. -* lines <1>: PostScript Commands. -* lines: Line vectors. -* listing of commands: Command Listing. -* moves <1>: Line vectors. -* moves: PostScript Commands. -* oztex printer driver: PostScript printer drivers. -* painting regions: Fill commands. -* paths <1>: PostScript Commands. -* paths <2>: Drawing paths. -* paths: Fill commands. -* pctexps printer driver: PostScript printer drivers. -* pctexwin printer driver: PostScript printer drivers. + (line 6) +* length of a vector: Coordinate parsing. (line 19) +* line cap: PostScript Commands. (line 25) +* line join: PostScript Commands. (line 25) +* line width: Line vectors. (line 64) +* lines: Line vectors. (line 6) +* lines <1>: PostScript Commands. (line 58) +* listing of commands: Command Listing. (line 6) +* moves: Line vectors. (line 6) +* moves <1>: PostScript Commands. (line 58) +* 'oztex' printer driver: PostScript printer drivers. + (line 13) +* painting regions: Fill commands. (line 6) +* paths: Fill commands. (line 6) +* paths <1>: Drawing paths. (line 6) +* paths <2>: PostScript Commands. (line 34) +* 'pctexps' printer driver: PostScript printer drivers. + (line 13) +* 'pctexwin' printer driver: PostScript printer drivers. + (line 13) * placement of graphics and text: How TeXdraw merges graphics and text. -* plain TeX: Accessing TeXdraw. + (line 6) +* plain TeX: Accessing TeXdraw. (line 6) * position specification: Coordinate specification. -* positions, saving: Saving positions. -* PostScript commands: PostScript Commands. -* PostScript printer drivers <1>: PostScript printer drivers. -* PostScript printer drivers: How TeXdraw merges graphics and text. -* printer drivers <1>: PostScript printer drivers. -* printer drivers: How TeXdraw merges graphics and text. + (line 6) +* positions, saving: Saving positions. (line 6) +* PostScript commands: PostScript Commands. (line 6) +* PostScript printer drivers: PostScript printer drivers. + (line 6) +* PostScript printer drivers <1>: How TeXdraw merges graphics and text. + (line 19) +* printer drivers: PostScript printer drivers. + (line 6) +* printer drivers <1>: How TeXdraw merges graphics and text. + (line 19) * problems while using TeXdraw: Errors while using TeXdraw. -* psprint driver: PostScript printer drivers. -* relative positioning: Line vectors. -* relative scaling: Scaling coordinates. -* resolution: Resolution. -* rotated text <1>: PostScript printer drivers. -* rotated text <2>: TeX text. -* rotated text <3>: Text placement. -* rotated text: How TeXdraw merges graphics and text. -* saving positions: Saving positions. -* scaling: Scaling. -* scaling coordinates: Scaling coordinates. -* segment scale: Scaling coordinates. -* segments: Drawing segments. -* sine of a vector direction: Coordinate parsing. -* size of the drawing: Drawing size. -* stroking lines <1>: PostScript Commands. -* stroking lines: Drawing paths. -* symbolic coordinate: Saving positions. -* syntax of commands: Command syntax. -* texdraw package <1>: How TeXdraw merges graphics and text. -* texdraw package <2>: Using TeXdraw with LaTeX. -* texdraw package: Accessing TeXdraw. -* text commands: TeX text. + (line 6) +* 'psprint' driver: PostScript printer drivers. + (line 13) +* relative positioning: Line vectors. (line 40) +* relative scaling: Scaling coordinates. (line 6) +* resolution: Resolution. (line 6) +* rotated text: TeX text. (line 23) +* rotated text <1>: TeX text. (line 40) +* rotated text <2>: PostScript printer drivers. + (line 13) +* rotated text <3>: Text placement. (line 16) +* rotated text <4>: How TeXdraw merges graphics and text. + (line 19) +* saving positions: Saving positions. (line 6) +* scaling: Scaling. (line 6) +* scaling coordinates: Scaling coordinates. (line 6) +* segment scale: Scaling coordinates. (line 6) +* segments: Drawing segments. (line 6) +* sine of a vector direction: Coordinate parsing. (line 19) +* size of the drawing: Drawing size. (line 6) +* stroking lines: Drawing paths. (line 6) +* stroking lines <1>: PostScript Commands. (line 34) +* symbolic coordinate: Saving positions. (line 6) +* syntax of commands: Command syntax. (line 6) +* 'texdraw' package: Accessing TeXdraw. (line 37) +* 'texdraw' package <1>: Using TeXdraw with LaTeX. + (line 6) +* 'texdraw' package <2>: How TeXdraw merges graphics and text. + (line 11) +* text commands: TeX text. (line 6) * text placement: How TeXdraw merges graphics and text. -* text rotation <1>: How TeXdraw merges graphics and text. -* text rotation <2>: TeX text. -* text rotation <3>: PostScript printer drivers. -* text rotation: Text placement. -* textures printer driver: PostScript printer drivers. -* unit scale: Scaling coordinates. -* vectors: Line vectors. -* vertical text: TeX text. -* width of lines: Line vectors. -* xdvi driver: PostScript printer drivers. + (line 6) +* text rotation: TeX text. (line 23) +* text rotation <1>: TeX text. (line 40) +* text rotation <2>: PostScript printer drivers. + (line 13) +* text rotation <3>: Text placement. (line 16) +* text rotation <4>: How TeXdraw merges graphics and text. + (line 19) +* 'textures' printer driver: PostScript printer drivers. + (line 13) +* unit scale: Scaling coordinates. (line 6) +* vectors: Line vectors. (line 6) +* vertical text: TeX text. (line 23) +* width of lines: Line vectors. (line 64) +* 'xdvi' driver: PostScript printer drivers. + (line 13) Tag Table: -Node: Top606 -Node: Introduction2013 -Node: Distribution4007 -Node: TeXdraw Commands4442 -Node: Accessing TeXdraw5051 -Ref: Accessing TeXdraw-Footnote-19799 -Node: Command syntax9962 -Node: TeXdraw coordinates11150 -Node: Coordinate specification12511 -Node: Line vectors13706 -Node: TeX text19481 -Node: Circles and arcs23795 -Node: Bezier curves27792 -Node: Fill commands29776 -Node: Drawing Segments and Scaling32306 -Node: Drawing segments32733 -Node: Drawing paths33823 -Node: Saving positions35437 -Node: Scaling coordinates38329 -Node: Drawing size41305 -Node: Initial current position43113 -Node: Using TeXdraw with LaTeX43900 -Node: PostScript printer drivers45369 -Node: More Details46494 -Node: Errors while using TeXdraw46989 -Node: Extending TeXdraw49297 -Node: Scaling50855 -Node: Resolution51784 -Node: Text placement53471 -Node: Intermediate PostScript file54531 -Node: How TeXdraw merges graphics and text56274 -Ref: How TeXdraw merges graphics and text-Footnote-157642 -Node: PostScript Commands57699 -Node: TeXdraw Toolbox62660 -Node: Coordinate parsing63200 -Node: Real arithmetic65352 -Node: Arrow curve66151 -Node: Examples70212 -Node: Block diagram70459 -Node: Filter response graph77224 -Node: Geometric construction78912 -Node: Command Listing81197 -Node: Command Index92653 -Node: Concept Index96690 +Node: Top607 +Node: Introduction2011 +Node: Distribution4010 +Node: TeXdraw Commands4451 +Node: Accessing TeXdraw5062 +Ref: Accessing TeXdraw-Footnote-19814 +Node: Command syntax9978 +Node: TeXdraw coordinates11174 +Node: Coordinate specification12544 +Node: Line vectors13743 +Node: TeX text19509 +Node: Circles and arcs23837 +Node: Bezier curves27841 +Node: Fill commands29825 +Node: Drawing Segments and Scaling32361 +Node: Drawing segments32790 +Node: Drawing paths33885 +Node: Saving positions35510 +Node: Scaling coordinates38413 +Node: Drawing size41397 +Node: Initial current position43212 +Node: Using TeXdraw with LaTeX44005 +Node: PostScript printer drivers45478 +Node: More Details46609 +Node: Errors while using TeXdraw47106 +Node: Extending TeXdraw49425 +Node: Scaling50992 +Node: Resolution51933 +Node: Text placement53634 +Node: Intermediate PostScript file54705 +Node: How TeXdraw merges graphics and text56461 +Ref: How TeXdraw merges graphics and text-Footnote-157839 +Node: PostScript Commands57897 +Node: TeXdraw Toolbox62883 +Node: Coordinate parsing63444 +Node: Real arithmetic65602 +Node: Arrow curve66405 +Node: Examples70453 +Node: Block diagram70720 +Node: Filter response graph77472 +Node: Geometric construction79152 +Node: Command Listing81423 +Node: Command Index92888 +Node: Concept Index97919 End Tag Table diff --git a/Master/texmf-dist/doc/support/texdraw/ChangeLog b/Master/texmf-dist/doc/support/texdraw/ChangeLog new file mode 100644 index 00000000000..8e7942e19ff --- /dev/null +++ b/Master/texmf-dist/doc/support/texdraw/ChangeLog @@ -0,0 +1,37 @@ +$Id: ChangeLog,v 2.0 1995/12/18 texdraw-V2R0 $ + +V2R0 1995/12/17 + - Interface to standard LaTeX2e graphics package + +V1R5c 1995/11/03 + - Fix version number reporting + - Modify LaTeX example for LaTeX2e + - Fix compilation of texindex + - Remove longstanding spurious character in blockdiagram.tex + +V1R5 1993/04/10 + - Fix \lpatt; it was only passing the first element of the pattern, + reported by Alex Stark (jas2@eng.cam.ac.uk). + - Added \fellip and \everytexdraw at the suggestion of Karl Berry + (karl@cs.umb.edu) + - Changes to documentation + - More docs on porting to other drivers + +V1R4a 1992/07/07 + - Removed a lingering space in \pixtobp + - Fix incorrect position when "move pending" AND "path in prgress" + - Repackage \special for easier porting to other systems + +V1R3 1991/05/08 + - Track pending moves to give a smaller PS file + - Added a path in progress flag + +V1R2 1991/04/21 + - Improved \intdiv with more precise results + +V1R1 1991/04/16 + - Macro names changed for compatibility with LaTeX + - EPSF style PostScript + +V1R0 1991/02/24 + - First version with revision control diff --git a/Master/texmf-dist/doc/support/texdraw/README b/Master/texmf-dist/doc/support/texdraw/README new file mode 100644 index 00000000000..91cced49d63 --- /dev/null +++ b/Master/texmf-dist/doc/support/texdraw/README @@ -0,0 +1,170 @@ +This file describes the contents of the distribution for TeXdraw + +$Id: README,v 2.0 1995/12/18 texdraw-V2R0 $ + +The TeXdraw package consists of a set of macro definitions for the TeX +typesetting program. These macros allow the user to produce PostScript +drawings from within TeX and LaTeX. + +The main benefits of TeXdraw accrue from the ability to produce drawings +from <within> TeX, using TeX fonts for labelling the drawing. + +Basic drawing features include: +(1) moves, lines and arrow vectors + - selectable gray level, line width pattern, arrowhead size and type +(2) circles, ellipses, arcs, and Bezier curves +(3) general fill command to fill a region defined by lines and Bezier + curves (selectable gray level) +(4) TeX text, including mathematics, can be positioned and superimposed + on the drawing + +TeXdraw has been designed to be extensible. Drawing "segments" are +relocatable, self-contained units. Using a combination of the begingroup/ +endgroup mechanism in TeX and the gsave/grestore mechanism in PostScript, +drawing segments allow for local changes to the scaling and line +parameters. Using TeX's macro definition capability, new drawing commands +can be constructed from drawing segments. + +The extensibility features include, +(1) relocatable drawing segments to keep changes local +(2) local segment scaling +(3) saving and restoring positions using symbolic positions + +The compressed file texdraw-V2R0.tar.Z is available for anonymous ftp on +ftp.TSP.EE.McGill.CA in directory /pub/tsp/texdraw. + +===== +Peter Kabal kabal@TSP.EE.McGill.CA +Department of Electrical Engineering +McGill University +Montreal, Quebec + + +===== +The distribution consists of the TeXdraw macros themselves, files with +auxiliary macros, and the TeXdraw manual (texinfo format, also as a +PostScript file). + +Distribution Contents: +---------------------- + +Miscellaneous: + README - this file + ChangeLog - log of changes to TeXdraw + +TeXdraw macros (main directory): + texdraw.tex - TeXdraw macros for TeX + texdraw.sty - LaTeX2e interface to TeXdraw + txdtools.tex - TeXdraw toolbox for extending TeXdraw + txdps.tex - TeXdraw macros for accessing PostScript macros + blockdiagram.tex - Block diagram macros for TeXdraw + txdexamp.tex - plain TeX code for the examples in the manual + txdexamp.latex - LaTeX2e code for the examples in the manual + +compacted TeXdraw macros (directory compact/): + texdraw.tex + txdtools.tex + txdps.tex + +TeXdraw documentation (directory manual/): + texdraw.ps - PostScript version of the manual + texdraw.texi - Texinfo source file for the TeXdraw manual + texdraw.aux - cross-references (generated by an earlier run, used + as input when TeX'ing the manual) + texdraw.cps - concept index (generated by an earlier run, used as + input when TeX'ing the manual) + texdraw.fns - sorted functon index (generated by an earlier run, + used as input when TeX'ing the manual). + +GNU Texinfo utilities (directory manual/): + texindex.c - Source for the texindex program + getopt.h - Include file for texindex.c + texinfo.tex - Texinfo macros used to make manuals and on-line + documentation + texi2dvi - Script to run TeX and texindex + +=============================================== +The following notes on setup are for Unix systems. + +Initial Tests: + +(1) Print the PostScript version of the manual ("texdraw.ps") to see the + capabilities of TeXdraw. +(2) Try TeX'ing the examples file. Assuming plain TeX is invoked with the + command "tex" and LaTeX2e is invoked with the command "latex" + % tex txdexamp + ... or ... + % latex texdexamp.latex +(3) Printing the examples using the appropriate printer driver program (only + dvips can be used with the plain TeX version of the examples), + % dvips txdexamp + +===== +Permanent Setup: + +Compact source files: +In the subdirectory "compact", there are versions of the macro files +with most comments and white space removed. + +(1) Private copy of TeXdraw. + Move the TeXdraw sources files ("texdraw.sty", texdraw.tex", + "txdtools.tex" and "txdps.tex") to an appropriate directory. If you are + keeping private versions of the files, consider using the directory + ~mylogin/tex . With many versions of TeX, including this directory in + the TeX input path variable (the environment variable TEXINPUTS) allows + you to refer to the files in TeX without specifying the full pathname. + With the C-cshell, a line in the ".login" file sets the environment + variable TEXINPUTS + % setenv TEXINPUTS ".:$HOME/tex:". + The last part of the path string should terminate with a colon to have + the default directory of TeX files available. +(2) Public copy of TeXdraw. + Move the TeXdraw source files ("texdraw.sty", "texdraw.tex", + "txdtools.tex" and "txdps.tex") to a directory that TeX searches by + default. This might be a directory such as "/usr/local/lib/tex/inputs". + Newer versions of TeX allow subdirectory searching - in that case, use + the directory "/usr/local/lib/tex/inputs/TeXdraw". + +===== +The following instructions pertain to installing the ability to use the +Texinfo system for any texinfo type manual. +(1) The GNU program "texindex" should built using + % cc texindex.c -o texindex + Move the program to an appropriate place such as "/usr/local/bin". +(2) The GNU script "texi2dvi" runs TeX and texindex for a texinfo file. + Move this script to an appropriate place such as "/usr/local/bin". +(3) The GNU "texinfo.tex" file should go into the public directories + searched by TeX, for instance "/usr/local/lib/tex/inputs", or + "/usr/local/lib/tex/inputs/texinfo". + +===== +Creating a TeXdraw manual from the sources: +(1) Make sure "texdraw.tex", "txdtools.tex" and "texinfo.tex" will be found + by TeX. +(2) To create the manual, you have to TeX the manual twice - the second + time to access the sorted indices and the cross-references. The + program "texindex" sorts the indices. (The distribution includes pre- + sorted indices that can be used). The three steps can be replaced by + an invokation of the script "texi2dvi". + % tex texdraw.texinfo + % texindex texdraw + % tex texdraw.texinfo +(3) If you have the printer driver program dvips, a PostScript version of the + manual is created as follows. + % dvips texdraw -o texdraw.ps + +===== +On-line info manual: + +Consider building an info version of the manual. For this you need the +GNU program "makeinfo" (available by anonymous ftp from prep.ai.mit.edu +as part of texinfo-XXX.tar.gz). After running "makeinfo texdraw", the top +level info directory file "dir" in /usr/local/emacs/info needs to be +updated to include a menu entry for TeXdraw. This entry is of the form +* TeXdraw: (texdraw). + TeXdraw is a collection of macros that allow drawings to be + created from within TeX. +Also the files produced by makeinfo (texdraw, texdraw-1, texdraw-2, and +texdraw-3) need to be moved there. The info file can be read from within +the emacs editor, or with the info reader program "info" (also part of the +texinfo distribution). diff --git a/Master/texmf-dist/doc/support/texdraw/getopt.c b/Master/texmf-dist/doc/support/texdraw/getopt.c deleted file mode 100644 index 36ebf5c5b03..00000000000 --- a/Master/texmf-dist/doc/support/texdraw/getopt.c +++ /dev/null @@ -1,762 +0,0 @@ -/* Getopt for GNU. - NOTE: getopt is now part of the C library, so if you don't know what - "Keep this file name-space clean" means, talk to roland@gnu.ai.mit.edu - before changing it! - - Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95 - Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -/* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>. - Ditto for AIX 3.2 and <stdlib.h>. */ -#ifndef _NO_PROTO -#define _NO_PROTO -#endif - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#if !defined (__STDC__) || !__STDC__ -/* This is a separate conditional since some stdc systems - reject `defined (const)'. */ -#ifndef const -#define const -#endif -#endif - -#include <stdio.h> - -/* Comment out all this code if we are using the GNU C Library, and are not - actually compiling the library itself. This code is part of the GNU C - Library, but also included in many other GNU distributions. Compiling - and linking in this code is a waste when using the GNU C library - (especially if it is a shared library). Rather than having every GNU - program understand `configure --with-gnu-libc' and omit the object files, - it is simpler to just do this in the source for each such file. */ - -#if defined (_LIBC) || !defined (__GNU_LIBRARY__) - - -/* This needs to come after some library #include - to get __GNU_LIBRARY__ defined. */ -#ifdef __GNU_LIBRARY__ -/* Don't include stdlib.h for non-GNU C libraries because some of them - contain conflicting prototypes for getopt. */ -#include <stdlib.h> -#endif /* GNU C library. */ - -/* This is for other GNU distributions with internationalized messages. - The GNU C Library itself does not yet support such messages. */ -#if HAVE_LIBINTL_H -# include <libintl.h> -#else -# define gettext(msgid) (msgid) -#endif - -/* This version of `getopt' appears to the caller like standard Unix `getopt' - but it behaves differently for the user, since it allows the user - to intersperse the options with the other arguments. - - As `getopt' works, it permutes the elements of ARGV so that, - when it is done, all the options precede everything else. Thus - all application programs are extended to handle flexible argument order. - - Setting the environment variable POSIXLY_CORRECT disables permutation. - Then the behavior is completely standard. - - GNU application programs can use a third alternative mode in which - they can distinguish the relative order of options and other arguments. */ - -#include "getopt.h" - -/* For communication from `getopt' to the caller. - When `getopt' finds an option that takes an argument, - the argument value is returned here. - Also, when `ordering' is RETURN_IN_ORDER, - each non-option ARGV-element is returned here. */ - -char *optarg = NULL; - -/* Index in ARGV of the next element to be scanned. - This is used for communication to and from the caller - and for communication between successive calls to `getopt'. - - On entry to `getopt', zero means this is the first call; initialize. - - When `getopt' returns EOF, this is the index of the first of the - non-option elements that the caller should itself scan. - - Otherwise, `optind' communicates from one call to the next - how much of ARGV has been scanned so far. */ - -/* XXX 1003.2 says this must be 1 before any call. */ -int optind = 0; - -/* The next char to be scanned in the option-element - in which the last option character we returned was found. - This allows us to pick up the scan where we left off. - - If this is zero, or a null string, it means resume the scan - by advancing to the next ARGV-element. */ - -static char *nextchar; - -/* Callers store zero here to inhibit the error message - for unrecognized options. */ - -int opterr = 1; - -/* Set to an option character which was unrecognized. - This must be initialized on some systems to avoid linking in the - system's own getopt implementation. */ - -int optopt = '?'; - -/* Describe how to deal with options that follow non-option ARGV-elements. - - If the caller did not specify anything, - the default is REQUIRE_ORDER if the environment variable - POSIXLY_CORRECT is defined, PERMUTE otherwise. - - REQUIRE_ORDER means don't recognize them as options; - stop option processing when the first non-option is seen. - This is what Unix does. - This mode of operation is selected by either setting the environment - variable POSIXLY_CORRECT, or using `+' as the first character - of the list of option characters. - - PERMUTE is the default. We permute the contents of ARGV as we scan, - so that eventually all the non-options are at the end. This allows options - to be given in any order, even with programs that were not written to - expect this. - - RETURN_IN_ORDER is an option available to programs that were written - to expect options and other ARGV-elements in any order and that care about - the ordering of the two. We describe each non-option ARGV-element - as if it were the argument of an option with character code 1. - Using `-' as the first character of the list of option characters - selects this mode of operation. - - The special argument `--' forces an end of option-scanning regardless - of the value of `ordering'. In the case of RETURN_IN_ORDER, only - `--' can cause `getopt' to return EOF with `optind' != ARGC. */ - -static enum -{ - REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER -} ordering; - -/* Value of POSIXLY_CORRECT environment variable. */ -static char *posixly_correct; - -#ifdef __GNU_LIBRARY__ -/* We want to avoid inclusion of string.h with non-GNU libraries - because there are many ways it can cause trouble. - On some systems, it contains special magic macros that don't work - in GCC. */ -#include <string.h> -#define my_index strchr -#else - -/* Avoid depending on library functions or files - whose names are inconsistent. */ - -char *getenv (); - -static char * -my_index (str, chr) - const char *str; - int chr; -{ - while (*str) - { - if (*str == chr) - return (char *) str; - str++; - } - return 0; -} - -/* If using GCC, we can safely declare strlen this way. - If not using GCC, it is ok not to declare it. */ -#ifdef __GNUC__ -/* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h. - That was relevant to code that was here before. */ -#if !defined (__STDC__) || !__STDC__ -/* gcc with -traditional declares the built-in strlen to return int, - and has done so at least since version 2.4.5. -- rms. */ -extern int strlen (const char *); -#endif /* not __STDC__ */ -#endif /* __GNUC__ */ - -#endif /* not __GNU_LIBRARY__ */ - -/* Handle permutation of arguments. */ - -/* Describe the part of ARGV that contains non-options that have - been skipped. `first_nonopt' is the index in ARGV of the first of them; - `last_nonopt' is the index after the last of them. */ - -static int first_nonopt; -static int last_nonopt; - -/* Exchange two adjacent subsequences of ARGV. - One subsequence is elements [first_nonopt,last_nonopt) - which contains all the non-options that have been skipped so far. - The other is elements [last_nonopt,optind), which contains all - the options processed since those non-options were skipped. - - `first_nonopt' and `last_nonopt' are relocated so that they describe - the new indices of the non-options in ARGV after they are moved. */ - -static void -exchange (argv) - char **argv; -{ - int bottom = first_nonopt; - int middle = last_nonopt; - int top = optind; - char *tem; - - /* Exchange the shorter segment with the far end of the longer segment. - That puts the shorter segment into the right place. - It leaves the longer segment in the right place overall, - but it consists of two parts that need to be swapped next. */ - - while (top > middle && middle > bottom) - { - if (top - middle > middle - bottom) - { - /* Bottom segment is the short one. */ - int len = middle - bottom; - register int i; - - /* Swap it with the top part of the top segment. */ - for (i = 0; i < len; i++) - { - tem = argv[bottom + i]; - argv[bottom + i] = argv[top - (middle - bottom) + i]; - argv[top - (middle - bottom) + i] = tem; - } - /* Exclude the moved bottom segment from further swapping. */ - top -= len; - } - else - { - /* Top segment is the short one. */ - int len = top - middle; - register int i; - - /* Swap it with the bottom part of the bottom segment. */ - for (i = 0; i < len; i++) - { - tem = argv[bottom + i]; - argv[bottom + i] = argv[middle + i]; - argv[middle + i] = tem; - } - /* Exclude the moved top segment from further swapping. */ - bottom += len; - } - } - - /* Update records for the slots the non-options now occupy. */ - - first_nonopt += (optind - last_nonopt); - last_nonopt = optind; -} - -/* Initialize the internal data when the first call is made. */ - -static const char * -_getopt_initialize (optstring) - const char *optstring; -{ - /* Start processing options with ARGV-element 1 (since ARGV-element 0 - is the program name); the sequence of previously skipped - non-option ARGV-elements is empty. */ - - first_nonopt = last_nonopt = optind = 1; - - nextchar = NULL; - - posixly_correct = getenv ("POSIXLY_CORRECT"); - - /* Determine how to handle the ordering of options and nonoptions. */ - - if (optstring[0] == '-') - { - ordering = RETURN_IN_ORDER; - ++optstring; - } - else if (optstring[0] == '+') - { - ordering = REQUIRE_ORDER; - ++optstring; - } - else if (posixly_correct != NULL) - ordering = REQUIRE_ORDER; - else - ordering = PERMUTE; - - return optstring; -} - -/* Scan elements of ARGV (whose length is ARGC) for option characters - given in OPTSTRING. - - If an element of ARGV starts with '-', and is not exactly "-" or "--", - then it is an option element. The characters of this element - (aside from the initial '-') are option characters. If `getopt' - is called repeatedly, it returns successively each of the option characters - from each of the option elements. - - If `getopt' finds another option character, it returns that character, - updating `optind' and `nextchar' so that the next call to `getopt' can - resume the scan with the following option character or ARGV-element. - - If there are no more option characters, `getopt' returns `EOF'. - Then `optind' is the index in ARGV of the first ARGV-element - that is not an option. (The ARGV-elements have been permuted - so that those that are not options now come last.) - - OPTSTRING is a string containing the legitimate option characters. - If an option character is seen that is not listed in OPTSTRING, - return '?' after printing an error message. If you set `opterr' to - zero, the error message is suppressed but we still return '?'. - - If a char in OPTSTRING is followed by a colon, that means it wants an arg, - so the following text in the same ARGV-element, or the text of the following - ARGV-element, is returned in `optarg'. Two colons mean an option that - wants an optional arg; if there is text in the current ARGV-element, - it is returned in `optarg', otherwise `optarg' is set to zero. - - If OPTSTRING starts with `-' or `+', it requests different methods of - handling the non-option ARGV-elements. - See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. - - Long-named options begin with `--' instead of `-'. - Their names may be abbreviated as long as the abbreviation is unique - or is an exact match for some defined option. If they have an - argument, it follows the option name in the same ARGV-element, separated - from the option name by a `=', or else the in next ARGV-element. - When `getopt' finds a long-named option, it returns 0 if that option's - `flag' field is nonzero, the value of the option's `val' field - if the `flag' field is zero. - - The elements of ARGV aren't really const, because we permute them. - But we pretend they're const in the prototype to be compatible - with other systems. - - LONGOPTS is a vector of `struct option' terminated by an - element containing a name which is zero. - - LONGIND returns the index in LONGOPT of the long-named option found. - It is only valid when a long-named option has been found by the most - recent call. - - If LONG_ONLY is nonzero, '-' as well as '--' can introduce - long-named options. */ - -int -_getopt_internal (argc, argv, optstring, longopts, longind, long_only) - int argc; - char *const *argv; - const char *optstring; - const struct option *longopts; - int *longind; - int long_only; -{ - optarg = NULL; - - if (optind == 0) - { - optstring = _getopt_initialize (optstring); - optind = 1; /* Don't scan ARGV[0], the program name. */ - } - - if (nextchar == NULL || *nextchar == '\0') - { - /* Advance to the next ARGV-element. */ - - if (ordering == PERMUTE) - { - /* If we have just processed some options following some non-options, - exchange them so that the options come first. */ - - if (first_nonopt != last_nonopt && last_nonopt != optind) - exchange ((char **) argv); - else if (last_nonopt != optind) - first_nonopt = optind; - - /* Skip any additional non-options - and extend the range of non-options previously skipped. */ - - while (optind < argc - && (argv[optind][0] != '-' || argv[optind][1] == '\0')) - optind++; - last_nonopt = optind; - } - - /* The special ARGV-element `--' means premature end of options. - Skip it like a null option, - then exchange with previous non-options as if it were an option, - then skip everything else like a non-option. */ - - if (optind != argc && !strcmp (argv[optind], "--")) - { - optind++; - - if (first_nonopt != last_nonopt && last_nonopt != optind) - exchange ((char **) argv); - else if (first_nonopt == last_nonopt) - first_nonopt = optind; - last_nonopt = argc; - - optind = argc; - } - - /* If we have done all the ARGV-elements, stop the scan - and back over any non-options that we skipped and permuted. */ - - if (optind == argc) - { - /* Set the next-arg-index to point at the non-options - that we previously skipped, so the caller will digest them. */ - if (first_nonopt != last_nonopt) - optind = first_nonopt; - return EOF; - } - - /* If we have come to a non-option and did not permute it, - either stop the scan or describe it to the caller and pass it by. */ - - if ((argv[optind][0] != '-' || argv[optind][1] == '\0')) - { - if (ordering == REQUIRE_ORDER) - return EOF; - optarg = argv[optind++]; - return 1; - } - - /* We have found another option-ARGV-element. - Skip the initial punctuation. */ - - nextchar = (argv[optind] + 1 - + (longopts != NULL && argv[optind][1] == '-')); - } - - /* Decode the current option-ARGV-element. */ - - /* Check whether the ARGV-element is a long option. - - If long_only and the ARGV-element has the form "-f", where f is - a valid short option, don't consider it an abbreviated form of - a long option that starts with f. Otherwise there would be no - way to give the -f short option. - - On the other hand, if there's a long option "fubar" and - the ARGV-element is "-fu", do consider that an abbreviation of - the long option, just like "--fu", and not "-f" with arg "u". - - This distinction seems to be the most useful approach. */ - - if (longopts != NULL - && (argv[optind][1] == '-' - || (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1]))))) - { - char *nameend; - const struct option *p; - const struct option *pfound = NULL; - int exact = 0; - int ambig = 0; - int indfound; - int option_index; - - for (nameend = nextchar; *nameend && *nameend != '='; nameend++) - /* Do nothing. */ ; - - /* Test all long options for either exact match - or abbreviated matches. */ - for (p = longopts, option_index = 0; p->name; p++, option_index++) - if (!strncmp (p->name, nextchar, nameend - nextchar)) - { - if (nameend - nextchar == strlen (p->name)) - { - /* Exact match found. */ - pfound = p; - indfound = option_index; - exact = 1; - break; - } - else if (pfound == NULL) - { - /* First nonexact match found. */ - pfound = p; - indfound = option_index; - } - else - /* Second or later nonexact match found. */ - ambig = 1; - } - - if (ambig && !exact) - { - if (opterr) - fprintf (stderr, gettext ("%s: option `%s' is ambiguous\n"), - argv[0], argv[optind]); - nextchar += strlen (nextchar); - optind++; - return '?'; - } - - if (pfound != NULL) - { - option_index = indfound; - optind++; - if (*nameend) - { - /* Don't test has_arg with >, because some C compilers don't - allow it to be used on enums. */ - if (pfound->has_arg) - optarg = nameend + 1; - else - { - if (opterr) - if (argv[optind - 1][1] == '-') - /* --option */ - fprintf (stderr, - gettext ("%s: option `--%s' doesn't allow an argument\n"), - argv[0], pfound->name); - else - /* +option or -option */ - fprintf (stderr, - gettext ("%s: option `%c%s' doesn't allow an argument\n"), - argv[0], argv[optind - 1][0], pfound->name); - - nextchar += strlen (nextchar); - return '?'; - } - } - else if (pfound->has_arg == 1) - { - if (optind < argc) - optarg = argv[optind++]; - else - { - if (opterr) - fprintf (stderr, - gettext ("%s: option `%s' requires an argument\n"), - argv[0], argv[optind - 1]); - nextchar += strlen (nextchar); - return optstring[0] == ':' ? ':' : '?'; - } - } - nextchar += strlen (nextchar); - if (longind != NULL) - *longind = option_index; - if (pfound->flag) - { - *(pfound->flag) = pfound->val; - return 0; - } - return pfound->val; - } - - /* Can't find it as a long option. If this is not getopt_long_only, - or the option starts with '--' or is not a valid short - option, then it's an error. - Otherwise interpret it as a short option. */ - if (!long_only || argv[optind][1] == '-' - || my_index (optstring, *nextchar) == NULL) - { - if (opterr) - { - if (argv[optind][1] == '-') - /* --option */ - fprintf (stderr, gettext ("%s: unrecognized option `--%s'\n"), - argv[0], nextchar); - else - /* +option or -option */ - fprintf (stderr, gettext ("%s: unrecognized option `%c%s'\n"), - argv[0], argv[optind][0], nextchar); - } - nextchar = (char *) ""; - optind++; - return '?'; - } - } - - /* Look at and handle the next short option-character. */ - - { - char c = *nextchar++; - char *temp = my_index (optstring, c); - - /* Increment `optind' when we start to process its last character. */ - if (*nextchar == '\0') - ++optind; - - if (temp == NULL || c == ':') - { - if (opterr) - { - if (posixly_correct) - /* 1003.2 specifies the format of this message. */ - fprintf (stderr, gettext ("%s: illegal option -- %c\n"), - argv[0], c); - else - fprintf (stderr, gettext ("%s: invalid option -- %c\n"), - argv[0], c); - } - optopt = c; - return '?'; - } - if (temp[1] == ':') - { - if (temp[2] == ':') - { - /* This is an option that accepts an argument optionally. */ - if (*nextchar != '\0') - { - optarg = nextchar; - optind++; - } - else - optarg = NULL; - nextchar = NULL; - } - else - { - /* This is an option that requires an argument. */ - if (*nextchar != '\0') - { - optarg = nextchar; - /* If we end this ARGV-element by taking the rest as an arg, - we must advance to the next element now. */ - optind++; - } - else if (optind == argc) - { - if (opterr) - { - /* 1003.2 specifies the format of this message. */ - fprintf (stderr, - gettext ("%s: option requires an argument -- %c\n"), - argv[0], c); - } - optopt = c; - if (optstring[0] == ':') - c = ':'; - else - c = '?'; - } - else - /* We already incremented `optind' once; - increment it again when taking next ARGV-elt as argument. */ - optarg = argv[optind++]; - nextchar = NULL; - } - } - return c; - } -} - -int -getopt (argc, argv, optstring) - int argc; - char *const *argv; - const char *optstring; -{ - return _getopt_internal (argc, argv, optstring, - (const struct option *) 0, - (int *) 0, - 0); -} - -#endif /* _LIBC or not __GNU_LIBRARY__. */ - -#ifdef TEST - -/* Compile with -DTEST to make an executable for use in testing - the above definition of `getopt'. */ - -int -main (argc, argv) - int argc; - char **argv; -{ - int c; - int digit_optind = 0; - - while (1) - { - int this_option_optind = optind ? optind : 1; - - c = getopt (argc, argv, "abc:d:0123456789"); - if (c == EOF) - break; - - switch (c) - { - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - if (digit_optind != 0 && digit_optind != this_option_optind) - printf ("digits occur in two different argv-elements.\n"); - digit_optind = this_option_optind; - printf ("option %c\n", c); - break; - - case 'a': - printf ("option a\n"); - break; - - case 'b': - printf ("option b\n"); - break; - - case 'c': - printf ("option c with value `%s'\n", optarg); - break; - - case '?': - break; - - default: - printf ("?? getopt returned character code 0%o ??\n", c); - } - } - - if (optind < argc) - { - printf ("non-option ARGV-elements: "); - while (optind < argc) - printf ("%s ", argv[optind++]); - printf ("\n"); - } - - exit (0); -} - -#endif /* TEST */ diff --git a/Master/texmf-dist/doc/support/texdraw/getopt.h b/Master/texmf-dist/doc/support/texdraw/getopt.h deleted file mode 100644 index 952f4830d3d..00000000000 --- a/Master/texmf-dist/doc/support/texdraw/getopt.h +++ /dev/null @@ -1,129 +0,0 @@ -/* Declarations for getopt. - Copyright (C) 1989, 90, 91, 92, 93, 94 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef _GETOPT_H -#define _GETOPT_H 1 - -#ifdef __cplusplus -extern "C" { -#endif - -/* For communication from `getopt' to the caller. - When `getopt' finds an option that takes an argument, - the argument value is returned here. - Also, when `ordering' is RETURN_IN_ORDER, - each non-option ARGV-element is returned here. */ - -extern char *optarg; - -/* Index in ARGV of the next element to be scanned. - This is used for communication to and from the caller - and for communication between successive calls to `getopt'. - - On entry to `getopt', zero means this is the first call; initialize. - - When `getopt' returns EOF, this is the index of the first of the - non-option elements that the caller should itself scan. - - Otherwise, `optind' communicates from one call to the next - how much of ARGV has been scanned so far. */ - -extern int optind; - -/* Callers store zero here to inhibit the error message `getopt' prints - for unrecognized options. */ - -extern int opterr; - -/* Set to an option character which was unrecognized. */ - -extern int optopt; - -/* Describe the long-named options requested by the application. - The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector - of `struct option' terminated by an element containing a name which is - zero. - - The field `has_arg' is: - no_argument (or 0) if the option does not take an argument, - required_argument (or 1) if the option requires an argument, - optional_argument (or 2) if the option takes an optional argument. - - If the field `flag' is not NULL, it points to a variable that is set - to the value given in the field `val' when the option is found, but - left unchanged if the option is not found. - - To have a long-named option do something other than set an `int' to - a compiled-in constant, such as set a value from `optarg', set the - option's `flag' field to zero and its `val' field to a nonzero - value (the equivalent single-letter option character, if there is - one). For long options that have a zero `flag' field, `getopt' - returns the contents of the `val' field. */ - -struct option -{ -#if defined (__STDC__) && __STDC__ - const char *name; -#else - char *name; -#endif - /* has_arg can't be an enum because some compilers complain about - type mismatches in all the code that assumes it is an int. */ - int has_arg; - int *flag; - int val; -}; - -/* Names for the values of the `has_arg' field of `struct option'. */ - -#define no_argument 0 -#define required_argument 1 -#define optional_argument 2 - -#if defined (__STDC__) && __STDC__ -#ifdef __GNU_LIBRARY__ -/* Many other libraries have conflicting prototypes for getopt, with - differences in the consts, in stdlib.h. To avoid compilation - errors, only prototype getopt for the GNU C library. */ -extern int getopt (int argc, char *const *argv, const char *shortopts); -#else /* not __GNU_LIBRARY__ */ -extern int getopt (); -#endif /* __GNU_LIBRARY__ */ -extern int getopt_long (int argc, char *const *argv, const char *shortopts, - const struct option *longopts, int *longind); -extern int getopt_long_only (int argc, char *const *argv, - const char *shortopts, - const struct option *longopts, int *longind); - -/* Internal only. Users should not call this directly. */ -extern int _getopt_internal (int argc, char *const *argv, - const char *shortopts, - const struct option *longopts, int *longind, - int long_only); -#else /* not __STDC__ */ -extern int getopt (); -extern int getopt_long (); -extern int getopt_long_only (); - -extern int _getopt_internal (); -#endif /* __STDC__ */ - -#ifdef __cplusplus -} -#endif - -#endif /* _GETOPT_H */ diff --git a/Master/texmf-dist/doc/support/texdraw/texdraw.pdf b/Master/texmf-dist/doc/support/texdraw/texdraw.pdf Binary files differdeleted file mode 100644 index a29240227f0..00000000000 --- a/Master/texmf-dist/doc/support/texdraw/texdraw.pdf +++ /dev/null diff --git a/Master/texmf-dist/doc/support/texdraw/texdraw.ps b/Master/texmf-dist/doc/support/texdraw/texdraw.ps new file mode 100644 index 00000000000..8af929ecb6a --- /dev/null +++ b/Master/texmf-dist/doc/support/texdraw/texdraw.ps @@ -0,0 +1,5665 @@ +%!PS-Adobe-2.0 +%%Creator: dvipsk 5.515a Copyright 1986, 1993 Radical Eye Software +%%Title: texdraw.dvi +%%Pages: 60 +%%PageOrder: Ascend +%%BoundingBox: 0 0 612 792 +%%EndComments +%DVIPSCommandLine: dvips texdraw -o texdraw.ps +%DVIPSSource: TeX output 1995.12.19:1238 +%%BeginProcSet: tex.pro +/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N +/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /@rigin{isls{[ +0 -1 1 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale +isls{Resolution hsize -72 div mul 0 TR}if Resolution VResolution vsize +-72 div 1 add mul TR matrix currentmatrix dup dup 4 get round 4 exch put +dup dup 5 get round 5 exch put setmatrix}N /@landscape{/isls true N}B +/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B +/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{ +/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N +string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N +end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{ +/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0] +N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup +length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{ +128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub +get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data +dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N +/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup +/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx +0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff +setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff +.1 add]{ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]} +if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup +length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{ +cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin +0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul +add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore showpage +userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook +known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X +/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for +65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0 +0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V +{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7 +getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false} +ifelse}{false}ifelse end{{gsave TR -.1 -.1 TR 1 1 scale rulex ruley +false RMat{BDot}imagemask grestore}}{{gsave TR -.1 -.1 TR rulex ruley +scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave +transform round exch round exch itransform moveto rulex 0 rlineto 0 +ruley neg rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta +0 N /tail{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail} +B /c{-4 M}B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{ +3 M}B /k{4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p +-1 w}B /q{p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{ +3 2 roll p a}B /bos{/SS save N}B /eos{SS restore}B end +%%EndProcSet +%%BeginProcSet: special.pro +TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N +/vs 792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP 0 N /rwiSeen +false N /rhiSeen false N /letter{}N /note{}N /a4{}N /legal{}N}B +/@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{@scaleunit +div /vsc X}B /@hsize{/hs X /CLIP 1 N}B /@vsize{/vs X /CLIP 1 N}B /@clip{ +/CLIP 2 N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{ +10 div /rwi X /rwiSeen true N}B /@rhi{10 div /rhi X /rhiSeen true N}B +/@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X}B /magscale +true def end /@MacSetUp{userdict /md known{userdict /md get type +/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup +length 20 add dict copy def}if end md begin /letter{}N /note{}N /legal{} +N /od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath +clippath mark{transform{itransform moveto}}{transform{itransform lineto} +}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{ +itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{ +closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39 +0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}N +/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1 +scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get +ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip +not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 +TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR +pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 +-1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg +TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg +sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr +0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add +2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N /cp +{pop pop showpage pm restore}N end}if}if}N /normalscale{Resolution 72 +div VResolution 72 div neg scale magscale{DVImag dup scale}if 0 setgray} +N /psfts{S 65781.76 div N}N /startTexFig{/psf$SavedState save N userdict +maxlength dict begin /magscale false def normalscale currentpoint TR +/psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts +/psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx +psf$llx sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy +scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR +/showpage{}N /erasepage{}N /copypage{}N /p 3 def @MacSetUp}N /doclip{ +psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 +roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath +moveto}N /endTexFig{end psf$SavedState restore}N /@beginspecial{SDict +begin /SpecialSave save N gsave normalscale currentpoint TR +@SpecialDefaults count /ocount X /dcount countdictstack N}N /@setspecial +{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto +closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx +sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR +}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse +CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury +lineto closepath clip}if /showpage{}N /erasepage{}N /copypage{}N newpath +}N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{ +end}repeat grestore SpecialSave restore end}N /@defspecial{SDict begin} +N /@fedspecial{end}B /li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{ +/SaveX currentpoint /SaveY X N 1 setlinecap newpath}N /st{stroke SaveX +SaveY moveto}N /fil{fill SaveX SaveY moveto}N /ellipse{/endangle X +/startangle X /yrad X /xrad X /savematrix matrix currentmatrix N TR xrad +yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end +%%EndProcSet +TeXDict begin 40258431 52099146 1000 300 300 (texdraw.dvi) +@start /Fa 1 47 df<70F8F8F0E005057B840E>46 D E /Fb 1 +47 df<387CFCFCF87006067A8512>46 D E /Fc 45 123 df<00FE000381000601800E03 +801C01001C00001C00001C00001C00001C0000FFFF801C03801C03801C03801C03801C03 +801C03801C03801C03801C03801C03801C03801C03801C03801C0380FF8FF0141A809915 +>12 D<60F0F07010101020204040040B7D830B>44 D<07E01C38381C300C700E60066006 +E007E007E007E007E007E007E007E007E007E00760066006700E300C381C1C3807E01018 +7F9713>48 D<03000700FF00070007000700070007000700070007000700070007000700 +070007000700070007000700070007007FF80D187D9713>I<0F80106020304038803CC0 +1CE01C401C003C003800380070006000C001800100020004040804100430083FF87FF8FF +F80E187E9713>I<07E01838201C601E700E201E001E001C001C0038007007E00038001C +000E000F000FE00FE00FC00F400E601C183807E010187F9713>I<001800180038007800 +F800B8013802380238043808381838103820384038C038FFFF0038003800380038003800 +3803FF10187F9713>I<30183FF03FE03F80200020002000200020002FC0306020300038 +0018001C001C401CE01CE01C80184038403030E00F800E187E9713>I<01F807040C0618 +0E300E300070006000E000E3E0E418E80CF00EE006E007E007E007600760077006300E18 +0C0C3807E010187F9713>I<40007FFF7FFE7FFE40048008801080100020004000400080 +01800100030003000700060006000E000E000E000E000E00040010197E9813>I<07E018 +18300C2006600660067006780C3E181F3007C003E00CF8307C601E600FC007C003C003C0 +0360022004181807E010187F9713>I<07E01C303018700C600EE006E006E007E007E007 +6007700F3017182707C700070006000E000C700C7018603030600F8010187F9713>I<FF +FF800E00E00E00700E00380E003C0E003C0E003C0E003C0E003C0E00780E00700E01E00F +FFC00E00F00E00780E003C0E001C0E001E0E001E0E001E0E001E0E001C0E003C0E00780E +00F0FFFFC0171A7F991B>66 D<FFFFF80E00380E00180E00080E000C0E00040E00040E00 +040E01000E01000E01000E03000FFF000E03000E01000E01000E01000E00020E00020E00 +020E00060E00040E00040E000C0E003CFFFFFC171A7F991A>69 D<FFFFF80E00380E0018 +0E00080E000C0E00040E00040E00040E01000E01000E01000E03000FFF000E03000E0100 +0E01000E01000E00000E00000E00000E00000E00000E00000E00000E0000FFE000161A7F +9919>I<FFE0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00 +000E00000E00000E00000E00000E00000E00000E00080E00080E00080E00180E00100E00 +300E00700E00F0FFFFF0151A7F9918>76 D<FFFF800E01E00E00700E00780E00380E003C +0E003C0E003C0E003C0E00380E00780E00700E01E00FFF800E00000E00000E00000E0000 +0E00000E00000E00000E00000E00000E00000E0000FFE000161A7F991A>80 +D<0FC21836200E6006C006C002C002C002E00070007E003FE01FF803FC007E000E000700 +03800380038003C002C006E004D81887E0101A7E9915>83 D<7FFFFF00701C0700401C01 +00401C0100C01C0180801C0080801C0080801C0080001C0000001C0000001C0000001C00 +00001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C00 +00001C0000001C0000001C0000001C000003FFE000191A7F991C>I<FFC0FF800F003C00 +0F001000070020000380200003C0400001C0800000E1800000F10000007A0000003E0000 +001C0000001E0000001E00000017000000278000004380000041C0000081E0000100E000 +0300700002007800040038000C001C001E003E00FF007FC01A1A7F991D>88 +D<1FC000387000383800101C00001C00001C0003FC001E1C00381C00701C00E01C00E01C +80E01C80E03C80705F801F8F0011107F8F13>97 D<FC00001C00001C00001C00001C0000 +1C00001C00001C00001C00001C00001CFC001D07001E03801C01C01C00C01C00E01C00E0 +1C00E01C00E01C00E01C00E01C01C01C01801E030019060010F800131A809915>I<07F8 +1C1C381C70087000E000E000E000E000E000E0007000700438081C1807E00E107F8F11> +I<003F0000070000070000070000070000070000070000070000070000070003E7000C17 +00180F00300700700700E00700E00700E00700E00700E00700E00700600700700700380F +001C370007C7E0131A7F9915>I<07C01C3030187018600CE00CFFFCE000E000E000E000 +6000700438081C1807E00E107F8F11>I<01F007180E381C101C001C001C001C001C001C +00FFC01C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF800D1A80 +990C>I<0FCF001871803030007038007038007038007038003030001860002FC0006000 +006000007000003FF0003FFC001FFE00600F00C00300C00300C00300C00300600600381C +0007E00011187F8F13>I<FC00001C00001C00001C00001C00001C00001C00001C00001C +00001C00001C7C001D87001E03801E03801C03801C03801C03801C03801C03801C03801C +03801C03801C03801C03801C0380FF9FF0141A809915>I<183C3C18000000000000FC1C +1C1C1C1C1C1C1C1C1C1C1C1C1CFF081A80990A>I<018003C003C0018000000000000000 +00000000000FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C001 +C001C001C001C041C0E180E3007E000A2182990C>I<FC00001C00001C00001C00001C00 +001C00001C00001C00001C00001C00001C1FC01C0F001C0C001C18001C20001C40001CE0 +001DE0001E70001C78001C38001C1C001C1E001C0F001C0F80FF9FE0131A809914>I<FC +001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C +001C001C001C001C001C001C00FF80091A80990A>I<FC7C1F001D8E63801E0781C01E07 +81C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C01C07 +01C01C0701C01C0701C0FF9FE7F81D107F8F20>I<FC7C001D87001E03801E03801C0380 +1C03801C03801C03801C03801C03801C03801C03801C03801C03801C0380FF9FF0141080 +8F15>I<07E01C38300C700E6006E007E007E007E007E007E0076006700E381C1C3807E0 +10107F8F13>I<FCFC001D07001E03801C01C01C01C01C00E01C00E01C00E01C00E01C00 +E01C00E01C01C01C01801E03001D06001CF8001C00001C00001C00001C00001C00001C00 +00FF80001317808F15>I<FC781D9C1E1C1E081C001C001C001C001C001C001C001C001C +001C001C00FF800E10808F0F>114 D<1F2060E04020C020C020F0007F003FC01FE000F0 +80708030C030C020F0408F800C107F8F0F>I<0800080008000800180018003800FFC038 +003800380038003800380038003800382038203820382018201C4007800B177F960F>I< +FC1F801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C0380 +1C07800C07800E0B8003F3F01410808F15>I<FF0F803C07001C06001C04001C04000E08 +000E080007100007100007100003A00003A00001C00001C00001C00000800011107F8F14 +>I<FE7F1F80381C07003C1C06001C0C04001C0E04000E1608000E1708000E1708000723 +10000723900007A3900003C1A00003C1E0000180C0000180C0000180C00019107F8F1C> +I<FE3F803C1E001C08000E10000F300007600003C00001C00001E00003E0000270000438 +00083800181C00381E00FC3FC012107F8F14>I<FF0F803C07001C06001C04001C04000E +08000E080007100007100007100003A00003A00001C00001C00001C00000800000800001 +0000010000E10000E20000E4000078000011177F8F14>I<FFF8E070C07080E081C081C0 +0380070007000E041C041C04380870087038FFF80E107F8F11>I +E /Fd 1 47 df<7070F06004047D830B>46 D E /Fe 31 126 df<0FC01FF03838701CE0 +0EE00EE00E400E000E001C001C00380030007000E001C0030006000C00180E300E7FFE7F +FE0F177E9614>50 D<FFF0FFFC381E380E38073807380738073807380E381E3FFC3FF038 +003800380038003800380038003800FE00FE0010177F9614>80 D<0FCC1FFC307C603CE0 +1CE01CE01CE00070007E003FE00FF001F8001C001E000E600EE00EE00EF01CF838FFF0C7 +E00F177E9614>83 D<C000E000E00070007000380038001C001C000E000E000700070003 +800380038001C001C000E000E00070007000380038001C001C000E000E00060F1D7E9914 +>92 D<1FC0007FF000707800201800001C00001C0007FC001FFC003C1C00701C00E01C00 +E01C00E01C00707C003FFF800F8F8011107E8F14>97 D<FC0000FC00001C00001C00001C +00001C00001C00001CF8001DFE001F07001E03001C03801C01C01C01C01C01C01C01C01C +01C01C01C01C03801E03001F0E001DFC000CF8001217809614>I<03F80FFE1C0E380470 +006000E000E000E000E00060007000380E1C1E0FFC03F00F107E8F14>I<007E00007E00 +000E00000E00000E00000E00000E0007CE000FFE001C3E00301E00700E00E00E00E00E00 +E00E00E00E00E00E00E00E00700E00301E00383E001FEFC007CFC012177F9614>I<07E0 +0FF01C38301C700CE00EE00EFFFEFFFEE00060007000380E1C1E0FFC03F00F107E8F14> +I<00FC01FE038E07040700070007007FFEFFFE0700070007000700070007000700070007 +00070007000700FFF8FFF80F177F9614>I<07CF001FFF80383B80301800701C00701C00 +701C003018003838003FF00037C0007000007000003FF8001FFC003FFE00700F00E00380 +E00380E00380E003807007003C1E001FFC0007F00011197F8F14>I<FC0000FC00001C00 +001C00001C00001C00001C00001C78001DFE001F86001E07001C07001C07001C07001C07 +001C07001C07001C07001C07001C07001C0700FF8FE0FF8FE01317809614>I<06000F00 +0F0006000000000000000000FF00FF000700070007000700070007000700070007000700 +07000700FFF8FFF80D187C9714>I<006000F000F0006000000000000000001FF01FF000 +700070007000700070007000700070007000700070007000700070007000700070007040 +E0E0C07F803F000C207E9714>I<FC0000FC00001C00001C00001C00001C00001C00001C +FF801CFF801C1C001C38001C70001CE0001DC0001FE0001FE0001E70001C38001C3C001C +1C001C0E00FF1F80FF1F801117809614>I<FF80FF800380038003800380038003800380 +038003800380038003800380038003800380038003800380FFFEFFFE0F177E9614>I<FB +8E00FFDF003CF3803CF38038E38038E38038E38038E38038E38038E38038E38038E38038 +E38038E380FEFBE0FE79E01310808F14>I<FC7800FDFE001F86001E07001C07001C0700 +1C07001C07001C07001C07001C07001C07001C07001C0700FF8FE0FF8FE01310808F14> +I<07C01FF03C78701C701CE00EE00EE00EE00EE00EE00E701C783C3C781FF007C00F107E +8F14>I<FCF800FDFE001F07001E03001C03801C01C01C01C01C01C01C01C01C01C01C01 +C01C03801E03001F0E001DFC001CF8001C00001C00001C00001C00001C00001C0000FF80 +00FF80001218808F14>I<FE1F00FE7F800EE3800F81000F00000F00000E00000E00000E +00000E00000E00000E00000E00000E0000FFF000FFF00011107F8F14>114 +D<0FD83FF86038C038C038F0007F803FF007F8001C6006E006F006F81CFFF8CFE00F107E +8F14>I<06000E000E000E000E007FFCFFFC0E000E000E000E000E000E000E000E000E0E +0E0E0E0E0E1C07F801F00F157F9414>I<FC3F00FC3F001C07001C07001C07001C07001C +07001C07001C07001C07001C07001C07001C07001C1F000FFFE003E7E01310808F14>I< +FE3F80FE3F803C1E001C1C001C1C001C1C000E38000E38000E3800063000077000077000 +07700003E00003E00003E00011107F8F14>I<FE3F80FE3F80700700380E00380E00380E +0039CE0039CE0039CE001B6C001A6C001A6C001A6C001E7C001E7C000E380011107F8F14 +>I<7E3F007E3F001E3C000E780007700007E00003E00001C00003C00003E0000770000E +78000E38001C1C00FE3F80FE3F8011107F8F14>I<FE3F80FE3F801C0E001C1C001C1C00 +0E1C000E38000E380007380007300007300003700003700003E00001E00001E00001C000 +01C00001C0000380007380007700007E00003C000011187F8F14>I<3FFF7FFF700E701C +7038007000E001C0038007000E001C0738077007FFFFFFFF10107F8F14>I<003E00FE01 +E003800380038003800380038003800380038003807F00FE007F00038003800380038003 +800380038003800380038001E000FE003E0F1D7E9914>I<7800FE000F00038003800380 +038003800380038003800380038001FC00FE01FC03800380038003800380038003800380 +038003800F00FE0078000F1D7E9914>125 D E /Ff 1 93 df<600000F00000F00000F8 +00007800007C00003C00003E00001E00001F00000F00000F800007800007C00003C00003 +E00001E00001E00001F00000F00000F800007800007C00003C00003E00001E00001F0000 +0F00000F800007800007800007C00003C00003E00001E00001F00000F00000F800007800 +007C00003C00003E00001E00001F00000F00000F000006182F7DA91F>92 +D E /Fg 1 1 df<FFFFC0FFFFC012027D871A>0 D E /Fh 1 1 df<FFFEFFFE0F027D85 +16>0 D E /Fi 1 44 df<00C00000C00000C00000C00000C00000C00000C00000C000FF +FF80FFFF8000C00000C00000C00000C00000C00000C00000C00000C00011127E8D15>43 +D E /Fj 28 121 df<0003FC00003FFE00007E070001F80F8003F01F8003E01F8007E01F +8007E01F8007E01F8007E0060007E0000007E0000007E0000007E0FFC0FFFFFFC0FFFFFF +C007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00F +C007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00F +C007E00FC007E00FC07FFC7FFC7FFC7FFC1E267FA522>12 D<3C7EFFFFFFFF7E3C08087C +8711>46 D<001C00003C0000FC00FFFC00FFFC0000FC0000FC0000FC0000FC0000FC0000 +FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000 +FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC007FFFFC7F +FFFC16237CA21F>49 D<01FF0007FFC01E07F03803F86001FC7C00FEFE00FEFE00FFFE00 +7FFE007F7C007F3800FF0000FF0000FE0000FE0001FC0001F80003F00007E0000780000F +00001E00003C0000700000E00301C0030380070700060600060FFFFE1FFFFE3FFFFE7FFF +FCFFFFFCFFFFFC18237DA21F>I<01FF0007FFE01E03F03801F83C01FC7E00FE7E00FE7E +00FE3E00FE1C01FE0001FC0001FC0003F80007F0000FC001FF0001FF000007E00001F000 +01F80000FC0000FE0000FF0000FF1000FF7C00FFFE00FFFE00FFFE00FEFE00FE7C01FC70 +01F83E07F00FFFC001FF0018237DA21F>I<0000380000007800000078000000F8000001 +F8000003F8000007F8000006F800000CF800001CF8000038F8000030F8000060F80000E0 +F80001C0F8000180F8000300F8000700F8000E00F8001C00F8001800F8003000F8007000 +F800E000F800FFFFFFC0FFFFFFC00001F8000001F8000001F8000001F8000001F8000001 +F8000001F800007FFFC0007FFFC01A237EA21F>I<18000C1F007C1FFFF81FFFF01FFFE0 +1FFFC01FFF801FFE0018000018000018000018000018000018FF001BFFE01F01F01C00F8 +0800FC00007E00007E00007E00007F00007F78007FFC007FFC007FFC007FFC007EF8007E +6000FC7000FC3801F81E07E007FFC001FE0018237DA21F>I<FFFFFFE000FFFFFFFC0003 +F800FF0003F8003F8003F8001FC003F8001FE003F8000FE003F8000FF003F8000FF003F8 +000FF003F8000FF003F8000FF003F8000FF003F8000FE003F8001FE003F8001FC003F800 +3F8003F800FF0003FFFFFC0003FFFFE00003F800000003F800000003F800000003F80000 +0003F800000003F800000003F800000003F800000003F800000003F800000003F8000000 +03F800000003F800000003F800000003F8000000FFFFE00000FFFFE0000024257EA42A> +80 D<FFFFFF800000FFFFFFF8000003F801FE000003F8007F000003F8003F800003F800 +1FC00003F8001FC00003F8001FE00003F8001FE00003F8001FE00003F8001FE00003F800 +1FE00003F8001FC00003F8001FC00003F8003F800003F8007F000003F801FE000003FFFF +F8000003FFFFC0000003F803F0000003F801F8000003F800FC000003F8007E000003F800 +7E000003F8007F000003F8007F000003F8007F000003F8007F000003F8007F800003F800 +7F800003F8007F800003F8007F806003F8003FC06003F8003FC0C003F8001FE1C0FFFFE0 +0FFF80FFFFE001FE002B257EA42E>82 D<00FF008007FFE3800F80F7801E001F803C000F +807800078078000380F8000380F8000180F8000180FC000180FC000000FF0000007FE000 +007FFF00003FFFE0003FFFF8001FFFFE0007FFFF0003FFFF80007FFF800003FFC000003F +C000000FE0000007E0000007E0C00003E0C00003E0C00003E0C00003C0E00003C0F00007 +C0F8000780FC000F00FFC03E00E3FFF800803FE0001B257DA422>I<7FFFFFFFF87FFFFF +FFF87E00FE01F87800FE00787000FE00386000FE00186000FE0018E000FE001CE000FE00 +0CC000FE000CC000FE000CC000FE000CC000FE000C0000FE00000000FE00000000FE0000 +0000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE000000 +00FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000 +FE00000000FE00000000FE00000000FE000000FFFFFE0000FFFFFE0026247EA32B>I<07 +FF00001FFFC0003E03E0003F01F0003F01F8003F00FC001E00FC000000FC000000FC0000 +00FC00003FFC0003FCFC000FC0FC003F00FC007E00FC007E00FC00FC00FC00FC00FC00FC +00FC00FC017C007E017C003F067C001FFC3FE007F01FE01B187E971E>97 +D<007FE003FFF807C07C1F80FC1F00FC3F00FC7E00787E0000FE0000FE0000FE0000FE00 +00FE0000FE0000FE0000FE00007E00007F00003F000C1F800C1FC01807E07003FFE0007F +0016187E971B>99 D<0001FF800001FF8000001F8000001F8000001F8000001F8000001F +8000001F8000001F8000001F8000001F8000001F8000001F8000001F80007F1F8003FFDF +8007E0FF801F803F803F001F803F001F807E001F807E001F80FE001F80FE001F80FE001F +80FE001F80FE001F80FE001F80FE001F80FE001F807E001F807E001F803F001F803F003F +801F807F800FC0FF8003FF9FF800FE1FF81D267EA522>I<007F0003FFC007C1F00F80F8 +1F00F83F007C7E007C7E007EFE007EFE007EFFFFFEFFFFFEFE0000FE0000FE00007E0000 +7E00007E00063F00061F000C0F801807E07003FFE0007F8017187E971C>I<01FF07C007 +FFDFE00F83F1E01F01F1E03E00F8007E00FC007E00FC007E00FC007E00FC007E00FC007E +00FC003E00F8001F01F0000F83E0000FFFC00011FF00003000000030000000380000003C +0000003FFFE0001FFFFC001FFFFE000FFFFF001FFFFF803C003F8078000FC0F80007C0F8 +0007C0F80007C0F80007C07C000F803E001F001F807E0007FFF80000FFC0001B247E971F +>103 D<FFC00000FFC000000FC000000FC000000FC000000FC000000FC000000FC00000 +0FC000000FC000000FC000000FC000000FC000000FC000000FC1F8000FC7FE000FCC3F00 +0FD01F000FF01F800FE01F800FE01F800FC01F800FC01F800FC01F800FC01F800FC01F80 +0FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F80 +0FC01F80FFFCFFF8FFFCFFF81D267DA522>I<0F001F803FC03FC03FC03FC01F800F0000 +00000000000000000000000000FFC0FFC00FC00FC00FC00FC00FC00FC00FC00FC00FC00F +C00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC0FFF8FFF80D277EA611>I<FFC0FFC0 +0FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC0 +0FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC0FFFCFFFC +0E267EA511>108 D<FF81FC01FC00FF87FF07FF000F8C1F8C1F800F980F980F800FB00F +F00FC00FA00FE00FC00FA00FE00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00F +C00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00F +C00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC0FFFCFF +FCFFFCFFFCFFFCFFFC2E187D9733>I<FF81F800FF87FE000F8C3F000F901F000FB01F80 +0FA01F800FA01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F80 +0FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F80FFFCFFF8 +FFFCFFF81D187D9722>I<007F800003FFF00007C0F8001F807E003F003F003F003F007E +001F807E001F80FE001FC0FE001FC0FE001FC0FE001FC0FE001FC0FE001FC0FE001FC0FE +001FC07E001F807E001F803F003F003F003F001F807E000FC0FC0003FFF000007F80001A +187E971F>I<FFC3F800FFCFFE000FF83F800FE00FC00FC00FE00FC007E00FC007F00FC0 +03F00FC003F80FC003F80FC003F80FC003F80FC003F80FC003F80FC003F80FC003F80FC0 +07F00FC007F00FC007E00FC00FC00FE01FC00FF83F000FDFFE000FC7F0000FC000000FC0 +00000FC000000FC000000FC000000FC000000FC000000FC000000FC00000FFFC0000FFFC +00001D237E9722>I<FF87C0FF8FF00F98F80FB1F80FA1F80FA1F80FE0F00FC0000FC000 +0FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC000 +0FC000FFFE00FFFE0015187E9719>114 D<07F9801FFF803C0F80700380F00180F00180 +F00180FC0000FF80007FFC007FFE003FFF800FFFC003FFC0001FE00003E0C001E0C001E0 +E001E0E001C0F003C0FC0780EFFF00C3FC0013187E9718>I<0060000060000060000060 +0000E00000E00001E00001E00003E00007E0001FE000FFFFC0FFFFC007E00007E00007E0 +0007E00007E00007E00007E00007E00007E00007E00007E00007E00007E06007E06007E0 +6007E06007E06007E06003E0C003F0C001FF80007E0013237FA218>I<FFC1FF80FFC1FF +800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F +800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC03F800FC03F +8007C07F8007E0DF8003FF9FF800FE1FF81D187D9722>I<FFF83FF0FFF83FF00FC00F00 +07E00C0003F01C0003F8380001FC700000FCE000007EC000003F8000003F8000001F8000 +000FC000001FE000001FF0000033F8000071F80000E0FC0001C07E0003807F0003003F00 +0F001F80FFC07FF8FFC07FF81D187F9720>120 D E /Fk 3 116 +df<07FFE000E07001C01801C01C01C01C01C01C0380380380380380700381C007FF0007 +00000700000700000E00000E00000E00000E00001C0000FF800016147F9315>80 +D<30F8590C4E0C9C0C980C180C180C30183019303130316032601C100D7F8C15>110 +D<0700188019C0318038001E000F0003804180E180C10082007C000A0D7E8C10>115 +D E /Fl 15 123 df<0000F8000306000406000803001003002003004007004007008007 +00800601000E01000C0107F80104700207D802001C02001C02001E04001E04001E04001E +04001E08003C08003C08003C0800781800701400F01400E01201C0218700207C00200000 +20000040000040000040000040000080000080000080000018297F9F1A>12 +D<01801801C01C0380380380380380380380380700700700700700700700700E00E00E00 +E00E00E00E00E11E01C21E01C21E03C21E05C43F08C439F0783800003800007000007000 +00700000700000E00000E00000E00000C00000181E7F931B>22 D<0FFFFC1FFFFC3FFFFC +608200C08400808400018400010400010C00030C00030C00020C00060C00060C000E0C00 +0C0E001C0E001C0E00380F0018060016147E931A>25 D<000F800038C000606000C07001 +C0700380780380780700780700780700780E00F00E00F00E00F00E01E01C01C01C01C01E +03801E0700390C0038F000380000380000700000700000700000700000E00000E00000E0 +0000C00000151E7F9318>I<04000180080003C0100003E0100001E0200000E0200000E0 +2000004040040040400C0040400C0040800C008080080080C0080180C0180300C0380600 +E07C0E00FFEFFC007FCFF8003F87F0001E03C0001B1480931C>33 +D<70F8F8F87005057C840D>58 D<00FFF9FFF0000F801F00000F001E00000F001E00000F +001E00001E003C00001E003C00001E003C00001E003C00003C007800003C007800003C00 +7800003C007800007800F000007FFFF000007800F000007800F00000F001E00000F001E0 +0000F001E00000F001E00001E003C00001E003C00001E003C00001E003C00003C0078000 +03C007800003C007800003C007800007C00F8000FFF8FFF800241F7E9E26>72 +D<00FFF80FF8000F8003E0000F000380000F000200000F000400001E000800001E002000 +001E004000001E008000003C010000003C040000003C080000003C180000007838000000 +787C000000793C0000007A3C000000F41E000000F81E000000F01E000000F00F000001E0 +0F000001E00F000001E007800001E007800003C007800003C003C00003C003C00003C003 +C00007C003E000FFFC3FFC00251F7E9E27>75 D<00FF803FF0000F800780000F80020000 +0BC00200000BC002000013C004000011E004000011E004000011E004000020F008000020 +F008000020F808000020780800004078100000403C100000403C100000403C100000801E +200000801E200000801E200000800F200001000F400001000F4000010007C000010007C0 +0002000780000200038000020003800006000380000F00010000FFE0010000241F7E9E25 +>78 D<07803F8007000700070007000E000E000E000E001C001C001CF01D0C3A0E3C0E38 +0F380F700F700F700F700FE01EE01EE01EE01CE03CE038607060E031C01F0010207E9F14 +>98 D<007C01C207010E011C013C013802780C7BF07C00F000F000F000F0007000700170 +023004183807C010147E9315>101 D<00007C0000CE00019E00039E00030C0007000007 +00000700000700000E00000E00000E0000FFF0000E00000E00001C00001C00001C00001C +00001C0000380000380000380000380000380000700000700000700000700000700000E0 +0000E00000E00000E00000C00001C000318000798000F300006200003C000017297E9F16 +>I<1E07802318C023A06043C0704380704380708700E00700E00700E00700E00E01C00E +01C00E01C00E03821C03841C07041C07081C03083803101801E017147E931B>110 +D<03C1C00C62201034701038F02038F020386040700000700000700000700000E00000E0 +0000E00000E02061C040F1C040F1C080E2C080446300383C0014147E931A>120 +D<01E02003F04007F8C00C1F8008010000020000040000080000100000600000C0000100 +000200000400800801001003003F060061FC0040F80080700013147E9315>122 +D E /Fm 1 81 df<FFFFFFFFF0FFFFFFFFF07000000FF878000000F83C000000381C0000 +001C0E0000000C0F000000040700000006038000000203C000000001E000000000E00000 +0000700000000078000000003C000000001C000000001E000000000F0000000007000000 +00038000000003800000000300000000070000000006000000000C000000001800000000 +380000000030000000006000000000C000000001C0000000018000000203000000060600 +0000040E0000000C0C0000001C180000003830000000F87000000FF87FFFFFFFF0FFFFFF +FFF0272A7E7F2C>80 D E /Fn 4 52 df<0F0030C0606060604020C030C030C030C030C0 +30C030C030C030C03040206060606030C00F000C137E9211>48 D<0C001C00EC000C000C +000C000C000C000C000C000C000C000C000C000C000C000C000C00FFC00A137D9211>I< +1F0060C06060F070F030603000700070006000C001C00180020004000810101020207FE0 +FFE00C137E9211>I<0FC030707038703870380038003000E00FC0007000380018001C60 +1CF01CF018E03860701FC00E137F9211>I E /Fo 34 122 df<1C3E7E7E3A0202040408 +081020C0070E7D840D>44 D<FFC0FFC00A027D8A0F>I<007E0001C3000301800701C00E +00C00E00E01C00E01C00E03C01E03801E07801E07801E07801E07801E07801E0F003C0F0 +03C0F003C0F003C0F003C0F00380F00780E00780E00700E00700E00E00600E00701C0030 +38003870000FC000131F7C9D17>48 D<000C001C00FC0F38003800380038003800380070 +0070007000700070007000E000E000E000E000E000E001C001C001C001C001C001C00380 +03C0FFFE0F1E7C9D17>I<003F8000C1E00100F00200780400780400780F007C0F807C0F +807C0F00780600780000F80000F00001E00001C0000380000700000E00001C0000380000 +600000C0000180000300200600200800401000403FFFC07FFF80FFFF80161E7E9D17>I< +007F000183C00201E00400F00700F00F00F00F01F00F01F00001E00001E00003C0000380 +000700000E0000F800000E000007000007800007C00003C00007C03007C07807C0F807C0 +F807C0F00780800F00400E00201C0018780007E000141F7D9D17>I<07FFFFF8007C0078 +003C0038003C001800780018007800080078000800780008007800080078080800F01000 +00F0100000F0100000F0300000FFF00000F0700001E0200001E0200001E0200001E02000 +01E0000801E0001003C0001003C0001003C0002003C0002003C0006003C000C0078001C0 +078007C0FFFFFF801D1F7E9E1F>69 D<07FFF000007E0000003C0000003C000000780000 +007800000078000000780000007800000078000000F0000000F0000000F0000000F00000 +00F0000000F0000001E0000001E0000001E0000001E0000001E0008001E0010003C00100 +03C0010003C0030003C0020003C0060003C0060007801E0007807C00FFFFFC00191F7E9E +1C>76 D<07FC0000FFC0007C0000F800003C00017800003C00017800004E0002F000004E +0002F000004E0004F000004E0004F000004E0008F000004E0008F00000870011E0000087 +0011E00000870021E00000870021E00000870041E00000838041E00001038083C0000103 +8083C00001038103C00001038203C0000101C203C0000101C403C0000201C40780000201 +C80780000201C80780000201D00780000200F00780000600E00780000600E00F00000F00 +C00F8000FFE0C1FFF8002A1F7E9E2A>I<07FFFF00007C03C0003C01E0003C00F0007800 +F0007800F8007800F8007800F8007800F8007800F000F001F000F001E000F003C000F007 +8000F00F0000FFF80001E0000001E0000001E0000001E0000001E0000001E0000003C000 +0003C0000003C0000003C0000003C0000003C000000780000007C00000FFFC00001D1F7E +9E1F>80 D<07FFFC00007C0700003C03C0003C01E0007801E0007801F0007801F0007801 +F0007801F0007801E000F003E000F003C000F0078000F00F0000F03C0000FFF00001E030 +0001E0380001E01C0001E01C0001E01C0001E01E0003C03E0003C03E0003C03E0003C03E +0003C03E0003C03E0207803E0407C01F04FFFC0F18000003E01F207E9E21>82 +D<003F040060CC01803C03801C03001C0700180600080E00080E00080E00080E00000F00 +000F80000FE00007FE0003FF8001FFC0007FE00007E00001E00000E00000F00000F04000 +E04000E04000E04000E06000C0600180E00380F80300C60C0081F80016217D9F19>I<07 +F8000C0C001E06001E07001C070000070000070000070000FF0007C7001E07003C0E0078 +0E00F00E10F00E10F00E10F01E10F02E20784F401F878014147D9317>97 +D<0700003F00000F00000700000700000E00000E00000E00000E00000E00000E00001C00 +001C7C001D87001E03801C01C01C01C03801C03801E03801E03801E03801E03801E07003 +C07003C0700380700780700700700E00E81C00C4380083E00013207B9F19>I<01FC0706 +0E0F1C0F380E78007000F000F000F000F000E000E000E000E000F0027004300818300FC0 +10147C9314>I<0000700003F00000F00000700000700000E00000E00000E00000E00000 +E00000E00001C000F9C00305C00E03C01C03C03801C0780380700380F00380F00380F003 +80F00380E00700E00700E00700E00700E00700700F00301E00186F000F8FE014207C9F19 +>I<00F800070E000E07001C0700380380780380700380F00380F00380FFFF80F00000E0 +0000E00000E00000E00000F001007002003004001C180007E00011147D9314>I<000780 +0018C00031E00061E000E1C000C00001C00001C00001C00001C00001C0000380007FF800 +0380000380000380000380000700000700000700000700000700000700000E00000E0000 +0E00000E00000E00000E00001C00001E0000FFE00013207E9F0E>I<00000E003E1100E1 +A301C1C20381E00780E00701E00F01E00F01E00F01E00703C007038007870004FC000800 +000800001800001C00000FFF000FFFC007FFE01800F0300030600030C00030C00030C000 +306000603000C01C070007FC00181F809417>I<00E00007E00001E00000E00000E00001 +C00001C00001C00001C00001C00001C000038000038F800390E003A0E003C06003806007 +80E00700E00700E00700E00700E00700E00E01C00E01C00E01C00E01C00E01C00E01C01C +03801E03C0FFCFF815207E9F19>I<01C003E003E003C001800000000000000000000000 +0003801F800780038003800700070007000700070007000E000E000E000E000E000E001C +001E00FF800B1F7F9E0C>I<00E007E001E000E000E001C001C001C001C001C001C00380 +038003800380038003800700070007000700070007000E000E000E000E000E000E001C00 +1E00FFC00B207F9F0C>108 D<0387C07C001F9861860007A072070003C0340300038038 +03000780780700070070070007007007000700700700070070070007007007000E00E00E +000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E001C01C01C001E01E01E00 +FFCFFCFFC022147E9326>I<038F801F90E007A0E003C0600380600780E00700E00700E0 +0700E00700E00700E00E01C00E01C00E01C00E01C00E01C00E01C01C03801E03C0FFCFF8 +15147E9319>I<00FC000387000E01801C00C03800E03800E07000F0F000F0F000F0F000 +F0F000F0E001E0E001E0E001C0E003C0F00380700700380E001C1C0007E00014147D9317 +>I<00E3E007EC3800F01C00E01E00E00E01C00E01C00F01C00F01C00F01C00F01C00F03 +801E03801E03801C03803C0380380380700740E00721C0071F000700000700000700000E +00000E00000E00000E00001E0000FFC000181D809319>I<038E001FB38007C78003C780 +0383000780000700000700000700000700000700000E00000E00000E00000E00000E0000 +0E00001C00001E0000FFE00011147E9312>114 D<01F2060E080618061802380438001E +001FE00FF003F8003C401C400C400C600C6018E010D0608FC00F147E9312>I<00800100 +01000100030007000F001E00FFF80E000E000E000E001C001C001C001C001C001C003800 +38203820382038203840384018800F000D1C7C9B12>I<1C0380FC1F803C07801C03801C +0380380700380700380700380700380700380700700E00700E00700E00700E00701E0070 +1E00703C00305E001F9FC012147B9319>I<FF83F81E00E01C00C01C00800E00800E0100 +0E02000E02000F040007040007080007080007100003900003A00003E00003C000038000 +01800001000015147C9318>I<FF9FE1FC3E0780701C0300601C0300401C0380401C0380 +800E0780800E0581000E0981000E09C2000E11C2000731C4000721C4000760C8000740C8 +000780F0000780F0000300E00003006000020040001E147C9321>I<1FF0FF03C07801C0 +6001C04000E08000E180007300007600003C00003C00001C00002E00004E000087000107 +000203800603800C01C03E03E0FF07FC18147F9318>I<0FF83F8001E00E0001C00C0001 +C0080000E0180000E0100000E0200000E0200000F0400000704000007080000070800000 +71000000390000003A0000003E0000003C00000038000000180000001000000010000000 +200000002000000040000070C00000F0800000F1000000E20000007C000000191D809318 +>I E /Fp 38 121 df<0001C0000003C000000FC000007FC0001FFFC000FFFFC000FFBF +C000E03FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003F +C000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003F +C000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003F +C000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003F +C0007FFFFFE07FFFFFE07FFFFFE01B2E7AAD28>49 D<003FE00001FFFE0007FFFF800F80 +FFC01E003FE038001FF07C000FF87E0007FCFF0007FCFF8007FEFF8007FEFF8003FEFF80 +03FE7F0003FE3E0007FE000007FE000007FC000007FC00000FF800000FF800000FF00000 +1FE000001FC000003F8000007F0000007E000000F8000001F0000003E0000007C000000F +0000001E000E003C000E0038000E0070001E00E0001C01C0001C0300003C07FFFFFC0FFF +FFFC1FFFFFFC3FFFFFFC7FFFFFF8FFFFFFF8FFFFFFF8FFFFFFF81F2E7CAD28>I<001FF8 +0000007FFF000001FFFFC00003E03FE00007800FF0000FC00FF8001FE007F8001FE007FC +001FE007FC001FE007FC001FE007FC000FC007FC00078007FC0000000FF80000000FF800 +00000FF00000001FE00000001FC00000003F80000000FE0000003FF80000003FFF800000 +001FE000000007F000000007F800000003FC00000003FE00000001FF00000001FF000000 +01FF80000001FF80000001FF801C0001FF803E0001FF807F0001FF80FF8001FF80FF8001 +FF00FF8001FF00FF8003FE007F0003FE007E0007FC003C0007F8001FC01FF0000FFFFFC0 +0003FFFF0000003FF80000212E7DAD28>I<0000007000000000F000000001F000000003 +F000000007F00000000FF00000000FF00000001FF00000003FF000000077F0000000F7F0 +000000E7F0000001C7F000000387F000000707F000000F07F000000E07F000001C07F000 +003807F000007007F00000F007F00000E007F00001C007F000038007F000070007F0000F +0007F0000E0007F0001C0007F000380007F000700007F000E00007F000FFFFFFFFE0FFFF +FFFFE0FFFFFFFFE000000FF00000000FF00000000FF00000000FF00000000FF00000000F +F00000000FF00000000FF00000000FF000000FFFFFE0000FFFFFE0000FFFFFE0232E7EAD +28>I<0C0000300FC003F00FFFFFE00FFFFFC00FFFFF800FFFFF000FFFFE000FFFF8000F +FFF0000FFF80000E0000000E0000000E0000000E0000000E0000000E0000000E0000000E +0000000E1FF0000E7FFE000FE03F800F800FC00E0007E00C0007F0000007F8000003FC00 +0003FC000003FC000003FE000003FE180003FE3E0003FE7F0003FEFF0003FEFF0003FEFF +0003FCFF0003FCFE0003FC780007F8780007F03C000FE01E001FC00FC07F8007FFFF0001 +FFFC00003FE0001F2E7CAD28>I<0000007800000000000078000000000000FC00000000 +0000FC000000000000FC000000000001FE000000000001FE000000000003FF0000000000 +03FF000000000007FF800000000007FF800000000007FF80000000000FFFC0000000000E +7FC0000000001E7FE0000000001C3FE0000000001C3FE000000000383FF000000000381F +F000000000781FF800000000700FF800000000700FF800000000E00FFC00000000E007FC +00000001E007FE00000001C003FE00000001C003FE000000038003FF000000038001FF00 +0000078001FF800000070000FF800000070000FF8000000FFFFFFFC000000FFFFFFFC000 +001FFFFFFFE000001C00003FE000003C00003FF000003800001FF000003800001FF00000 +7000001FF800007000000FF80000F000000FFC0000E0000007FC0000E0000007FC0001C0 +000007FE0003E0000003FE00FFFF8001FFFFFCFFFF8001FFFFFCFFFF8001FFFFFC36317D +B03D>65 D<FFFFFFFFE00000FFFFFFFFFE0000FFFFFFFFFF800000FF0000FFC00000FF00 +003FF00000FF00001FF80000FF00000FF80000FF000007FC0000FF000007FC0000FF0000 +07FE0000FF000003FE0000FF000003FE0000FF000003FE0000FF000003FE0000FF000007 +FE0000FF000007FE0000FF000007FC0000FF000007FC0000FF00000FF80000FF00001FF0 +0000FF00003FE00000FF0000FF800000FF000FFF000000FFFFFFFE000000FFFFFFFFC000 +00FF00001FF00000FF000007F80000FF000003FE0000FF000003FE0000FF000001FF0000 +FF000001FF8000FF000000FF8000FF000000FFC000FF000000FFC000FF000000FFC000FF +000000FFC000FF000000FFC000FF000000FFC000FF000000FFC000FF000000FF8000FF00 +0001FF8000FF000001FF0000FF000003FF0000FF000007FE0000FF00000FFC0000FF0000 +7FF800FFFFFFFFFFE000FFFFFFFFFF8000FFFFFFFFFC000032317EB039>I<000003FF80 +018000003FFFF003800001FFFFFC07800007FF003F0F80001FF800079F80003FC00001FF +8000FF800000FF8001FE0000007F8003FC0000003F8007FC0000001F8007F80000000F80 +0FF00000000F801FF000000007801FF000000007803FE000000007803FE000000003807F +E000000003807FE000000003807FC000000000007FC00000000000FFC00000000000FFC0 +0000000000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC000 +00000000FFC00000000000FFC000000000007FC000000000007FC000000000007FE00000 +0000007FE000000003803FE000000003803FE000000003801FF000000003801FF0000000 +07800FF0000000070007F8000000070007FC0000000E0003FC0000001E0001FE0000001C +0000FF8000007800003FC00000F000001FF80003E0000007FF003F80000001FFFFFE0000 +00003FFFF80000000003FF80000031317CB03A>I<FFFFFFFFF00000FFFFFFFFFF0000FF +FFFFFFFFC00000FF8000FFF00000FF80000FF80000FF800003FE0000FF800001FF0000FF +800000FF8000FF8000007FC000FF8000003FC000FF8000001FE000FF8000001FF000FF80 +00000FF000FF8000000FF800FF8000000FF800FF80000007FC00FF80000007FC00FF8000 +0007FC00FF80000007FC00FF80000007FE00FF80000007FE00FF80000007FE00FF800000 +07FE00FF80000007FE00FF80000007FE00FF80000007FE00FF80000007FE00FF80000007 +FE00FF80000007FE00FF80000007FE00FF80000007FC00FF80000007FC00FF80000007FC +00FF80000007FC00FF8000000FF800FF8000000FF800FF8000000FF000FF8000001FF000 +FF8000001FE000FF8000003FE000FF8000007FC000FF8000007F8000FF800001FF0000FF +800003FE0000FF80000FFC0000FF80007FF000FFFFFFFFFFC000FFFFFFFFFF0000FFFFFF +FFF0000037317EB03E>I<FFFFFFFFFFF0FFFFFFFFFFF0FFFFFFFFFFF000FF80003FF000 +FF800007F800FF800003F800FF800000F800FF800000F800FF8000007800FF8000007800 +FF8000003800FF8000003800FF8000003800FF8000001C00FF8007001C00FF8007001C00 +FF8007001C00FF8007000000FF8007000000FF800F000000FF801F000000FF803F000000 +FFFFFF000000FFFFFF000000FFFFFF000000FF803F000000FF801F000000FF800F000000 +FF8007000000FF8007000000FF8007000700FF8007000700FF8007000700FF8000000E00 +FF8000000E00FF8000000E00FF8000000E00FF8000001E00FF8000001E00FF8000003C00 +FF8000003C00FF8000007C00FF800000FC00FF800001FC00FF800007FC00FF80003FFCFF +FFFFFFFFF8FFFFFFFFFFF8FFFFFFFFFFF830317EB035>I<FFFFFF80FFFFFF80FFFFFF80 +00FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF8000 +00FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF8000 +00FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF8000 +00FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF8000 +00FF800000FF800000FF800000FF800000FF800000FF800000FF8000FFFFFF80FFFFFF80 +FFFFFF8019317EB01E>73 D<FFFFFFE00000FFFFFFE00000FFFFFFE0000000FF80000000 +00FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF80000000 +00FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF80000000 +00FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF80000000 +00FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF80000000 +00FF8000000000FF8000000000FF800001C000FF800001C000FF800001C000FF800001C0 +00FF800003C000FF8000038000FF8000038000FF8000078000FF8000078000FF80000780 +00FF80000F8000FF80001F8000FF80003F8000FF80007F8000FF8000FF0000FF8007FF00 +FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF002A317EB030>76 D<FFFFC000000003FFFFFF +FFC000000003FFFFFFFFE000000007FFFF00FFE000000007FF0000EFF00000000EFF0000 +EFF00000000EFF0000EFF00000000EFF0000E7F80000001CFF0000E7F80000001CFF0000 +E3FC00000038FF0000E3FC00000038FF0000E1FE00000070FF0000E1FE00000070FF0000 +E0FF000000E0FF0000E0FF000000E0FF0000E07F800001C0FF0000E07F800001C0FF0000 +E03FC0000380FF0000E03FC0000380FF0000E03FC0000380FF0000E01FE0000700FF0000 +E01FE0000700FF0000E00FF0000E00FF0000E00FF0000E00FF0000E007F8001C00FF0000 +E007F8001C00FF0000E003FC003800FF0000E003FC003800FF0000E001FE007000FF0000 +E001FE007000FF0000E000FF00E000FF0000E000FF00E000FF0000E000FF00E000FF0000 +E0007F81C000FF0000E0007F81C000FF0000E0003FC38000FF0000E0003FC38000FF0000 +E0001FE70000FF0000E0001FE70000FF0000E0000FFE0000FF0000E0000FFE0000FF0000 +E00007FC0000FF0000E00007FC0000FF0000E00007FC0000FF0000E00003F80000FF0001 +F00003F80000FF00FFFFE001F000FFFFFFFFFFE001F000FFFFFFFFFFE000E000FFFFFF48 +317EB04D>I<FFFFFFFFE000FFFFFFFFFE00FFFFFFFFFF8000FF8000FFE000FF80003FF0 +00FF80000FF800FF800007FC00FF800007FC00FF800003FE00FF800003FE00FF800003FF +00FF800003FF00FF800003FF00FF800003FF00FF800003FF00FF800003FF00FF800003FF +00FF800003FE00FF800003FE00FF800007FC00FF800007F800FF80000FF800FF80003FE0 +00FF8000FFC000FFFFFFFF0000FFFFFFF80000FF8000000000FF8000000000FF80000000 +00FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF80000000 +00FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF80000000 +00FF8000000000FF8000000000FF8000000000FF8000000000FF80000000FFFFFF800000 +FFFFFF800000FFFFFF80000030317EB037>80 D<001FF8018000FFFF038003FFFFC78007 +F007EF800F8000FF801F00007F803E00001F803E00000F807C00000F807C00000780FC00 +000780FC00000780FC00000380FE00000380FE00000380FF00000000FFC00000007FF000 +00007FFF8000003FFFF800003FFFFF80001FFFFFF0000FFFFFF80007FFFFFE0003FFFFFF +0000FFFFFF80003FFFFF800001FFFFC000001FFFE0000000FFE00000003FE00000001FF0 +0000000FF000000007F060000007F0E0000003F0E0000003F0E0000003F0E0000003E0F0 +000003E0F0000003E0F8000007C0FC000007C0FF00000F80FFC0001F00FBFC00FE00F1FF +FFF800E03FFFF000C003FF800024317CB02D>83 D<7FFFFFFFFFFF007FFFFFFFFFFF007F +FFFFFFFFFF007FC00FF801FF007E000FF8003F007C000FF8001F0078000FF8000F007800 +0FF8000F0070000FF8000700F0000FF8000780F0000FF8000780F0000FF8000780E0000F +F8000380E0000FF8000380E0000FF8000380E0000FF8000380E0000FF800038000000FF8 +00000000000FF800000000000FF800000000000FF800000000000FF800000000000FF800 +000000000FF800000000000FF800000000000FF800000000000FF800000000000FF80000 +0000000FF800000000000FF800000000000FF800000000000FF800000000000FF8000000 +00000FF800000000000FF800000000000FF800000000000FF800000000000FF800000000 +000FF800000000000FF800000000000FF800000000000FF800000000000FF80000000000 +0FF800000000000FF8000000007FFFFFFF0000007FFFFFFF0000007FFFFFFF000031307D +AF38>I<FFFFFF8003FFFF80FFFFFF8003FFFF80FFFFFF8003FFFF8000FF80000007C000 +00FF80000003800000FF80000003800000FF80000003800000FF80000003800000FF8000 +0003800000FF80000003800000FF80000003800000FF80000003800000FF800000038000 +00FF80000003800000FF80000003800000FF80000003800000FF80000003800000FF8000 +0003800000FF80000003800000FF80000003800000FF80000003800000FF800000038000 +00FF80000003800000FF80000003800000FF80000003800000FF80000003800000FF8000 +0003800000FF80000003800000FF80000003800000FF80000003800000FF800000038000 +00FF80000003800000FF80000003800000FF80000003800000FF80000003800000FF8000 +00038000007F800000038000007F800000070000007FC00000070000003FC000000E0000 +003FC000000E0000001FE000001C0000000FF000003800000007F800007000000003FC00 +01E000000000FF801FC0000000003FFFFF80000000000FFFFE000000000000FFE0000000 +39317EB03E>I<7FFFFF007FFFF87FFFFF007FFFF87FFFFF007FFFF800FFE00001F00000 +7FE00001E000003FF00001C000001FF80003C000001FFC00078000000FFC000F00000007 +FE000E00000007FF001E00000003FF003C00000001FF807800000000FFC07000000000FF +E0F0000000007FE1E0000000003FF3C0000000003FFB80000000001FFF80000000000FFF +000000000007FE000000000007FF000000000003FF000000000001FF800000000001FFC0 +0000000000FFC00000000001FFE00000000003FFF00000000007BFF800000000071FF800 +0000000F0FFC000000001E0FFE000000003C07FE000000003803FF000000007801FF8000 +0000F001FFC0000000E000FFC0000001C0007FE0000003C0007FF000000780003FF00000 +0700001FF800000F00000FFC00001E00000FFE00003C000007FE000038000003FF0000FC +000003FF80FFFFE0007FFFFFFFFFE0007FFFFFFFFFE0007FFFFF38317EB03D>88 +D<00FFF0000003FFFE00000F803F80000FC00FE0001FE007F0001FE007F0001FE003F800 +0FC003FC00078003FC00000003FC00000003FC00000003FC00000003FC000000FFFC0000 +1FFFFC0000FFE3FC0003FC03FC000FF003FC001FC003FC003FC003FC007F8003FC007F80 +03FC00FF0003FC00FF0003FC00FF0003FC00FF0007FC00FF0007FC007F800DFC003FC019 +FE001FE070FFF007FFE07FF000FF803FF024207E9F27>97 D<01F8000000FFF8000000FF +F8000000FFF80000000FF800000007F800000007F800000007F800000007F800000007F8 +00000007F800000007F800000007F800000007F800000007F800000007F800000007F800 +000007F800000007F83FE00007F8FFFC0007FBE07F0007FF001F8007FE000FC007FC000F +E007F80007F007F80007F807F80007F807F80003FC07F80003FC07F80003FC07F80003FE +07F80003FE07F80003FE07F80003FE07F80003FE07F80003FE07F80003FE07F80003FE07 +F80003FC07F80003FC07F80003FC07F80007F807F80007F807F80007F007FC000FE007FE +000FC007E7003F8007C3C0FE000780FFF80007003FC00027327EB12D>I<000FFF00007F +FFC001FC01F003F003F007E007F80FE007F81FC007F83FC003F03FC001E07F8000007F80 +00007F800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF80 +00007F8000007F8000007F8000003FC0001C3FC0001C1FC000380FE0003807E0007003F0 +01E001FC07C0007FFF00000FF8001E207D9F24>I<0000000FC0000007FFC0000007FFC0 +000007FFC00000007FC00000003FC00000003FC00000003FC00000003FC00000003FC000 +00003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000 +003FC00007F83FC0003FFF3FC000FE07BFC003F801FFC007E0007FC00FE0007FC01FC000 +3FC03FC0003FC03FC0003FC07F80003FC07F80003FC07F80003FC0FF80003FC0FF80003F +C0FF80003FC0FF80003FC0FF80003FC0FF80003FC0FF80003FC0FF80003FC07F80003FC0 +7F80003FC07F80003FC03FC0003FC03FC0003FC01FC0003FC00FE0007FC007E000FFC003 +F003FFE001FC0F3FFE007FFE3FFE000FF03FFE27327DB12D>I<000FFC00007FFF8001FC +0FC003F003E007E001F00FE001F81FC000FC3FC000FE3FC000FE7F80007E7F80007F7F80 +007FFF80007FFF80007FFFFFFFFFFFFFFFFFFF800000FF800000FF800000FF8000007F80 +00007F8000007F8000003FC000071FC000071FC0000E0FE0000E07F0001C03F8007800FE +03E0003FFFC00007FE0020207E9F25>I<0001FE00000FFF80001FC3C0007F07E000FE0F +F001FE0FF001FC0FF003FC0FF003FC07E003FC018003FC000003FC000003FC000003FC00 +0003FC000003FC000003FC000003FC0000FFFFFC00FFFFFC00FFFFFC0003FC000003FC00 +0003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC00 +0003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC00 +0003FC000003FC000003FC000003FC000003FC000003FC00007FFFF0007FFFF0007FFFF0 +001C327EB119>I<001FF007C000FFFE3FE001F83F79F007E00FC3F00FE00FE1F00FC007 +E0E01FC007F0001FC007F0003FC007F8003FC007F8003FC007F8003FC007F8003FC007F8 +001FC007F0001FC007F0000FC007E0000FE00FE00007E00FC00003F83F000006FFFE0000 +0E1FF000000E000000001E000000001E000000001F000000001F800000001FFFFF80000F +FFFFF0000FFFFFFC0007FFFFFE0003FFFFFF0003FFFFFF800FFFFFFFC01F00007FC07E00 +001FE07C00000FE0FC000007E0FC000007E0FC000007E0FC000007E07E00000FC03E0000 +0F803F00001F800FC0007E0007F803FC0001FFFFF000001FFF0000242F7E9F28>I<01F8 +000000FFF8000000FFF8000000FFF80000000FF800000007F800000007F800000007F800 +000007F800000007F800000007F800000007F800000007F800000007F800000007F80000 +0007F800000007F800000007F800000007F807F80007F83FFE0007F8783F0007F8C03F80 +07F9801FC007FB001FC007FE001FE007FC001FE007FC001FE007FC001FE007F8001FE007 +F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8 +001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F800 +1FE007F8001FE007F8001FE007F8001FE0FFFFC3FFFFFFFFC3FFFFFFFFC3FFFF28327DB1 +2D>I<03C00007E0000FF0001FF8001FF8001FF8001FF8000FF00007E00003C000000000 +00000000000000000000000000000000000000000000000001F800FFF800FFF800FFF800 +0FF80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800 +07F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800 +07F800FFFF80FFFF80FFFF8011337DB217>I<01F800FFF800FFF800FFF8000FF80007F8 +0007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F8 +0007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F8 +0007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F8 +0007F80007F80007F80007F80007F800FFFFC0FFFFC0FFFFC012327DB117>108 +D<03F007F8001FE000FFF03FFE00FFF800FFF0783F01E0FC00FFF0C03F8300FE000FF180 +1FC6007F0007F3001FCC007F0007F6001FF8007F8007FC001FF0007F8007FC001FF0007F +8007FC001FF0007F8007F8001FE0007F8007F8001FE0007F8007F8001FE0007F8007F800 +1FE0007F8007F8001FE0007F8007F8001FE0007F8007F8001FE0007F8007F8001FE0007F +8007F8001FE0007F8007F8001FE0007F8007F8001FE0007F8007F8001FE0007F8007F800 +1FE0007F8007F8001FE0007F8007F8001FE0007F8007F8001FE0007F8007F8001FE0007F +8007F8001FE0007F8007F8001FE0007F80FFFFC3FFFF0FFFFCFFFFC3FFFF0FFFFCFFFFC3 +FFFF0FFFFC3E207D9F43>I<03F007F800FFF03FFE00FFF0783F00FFF0C03F800FF1801F +C007F3001FC007F6001FE007FC001FE007FC001FE007FC001FE007F8001FE007F8001FE0 +07F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007 +F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8 +001FE007F8001FE007F8001FE0FFFFC3FFFFFFFFC3FFFFFFFFC3FFFF28207D9F2D>I<00 +07FC0000007FFFC00001FC07F00003F001F80007E000FC000FC0007E001FC0007F003FC0 +007F803F80003F807F80003FC07F80003FC07F80003FC0FF80003FE0FF80003FE0FF8000 +3FE0FF80003FE0FF80003FE0FF80003FE0FF80003FE0FF80003FE07F80003FC07F80003F +C07F80003FC03FC0007F803FC0007F801FC0007F000FE000FE0007E000FC0003F803F800 +01FE0FF000007FFFC0000007FC000023207E9F28>I<01F83FE000FFF8FFFC00FFFBE07F +00FFFF003F8007FE001FC007FC000FE007F8000FF007F80007F807F80007F807F80007FC +07F80003FC07F80003FC07F80003FE07F80003FE07F80003FE07F80003FE07F80003FE07 +F80003FE07F80003FE07F80003FE07F80003FC07F80007FC07F80007FC07F80007F807F8 +0007F807F8000FF007FC000FE007FE001FC007FF003F8007FBC0FE0007F8FFF80007F83F +C00007F800000007F800000007F800000007F800000007F800000007F800000007F80000 +0007F800000007F800000007F800000007F8000000FFFFC00000FFFFC00000FFFFC00000 +272E7E9F2D>I<03F03F00FFF07FC0FFF1C3E0FFF187E00FF30FF007F60FF007F60FF007 +FC07E007FC03C007FC000007FC000007F8000007F8000007F8000007F8000007F8000007 +F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007 +F8000007F8000007F8000007F80000FFFFE000FFFFE000FFFFE0001C207E9F21>114 +D<01FF860007FFFE001F00FE003C003E0078001E0078000E00F8000E00F8000E00F8000E +00FC000000FF800000FFFC00007FFFC0007FFFF0003FFFF8001FFFFC0007FFFE0001FFFF +00003FFF000000FF8000003F8060001F80E0000F80E0000F80F0000F80F0000F00F8000F +00FC001E00FE001C00FF807800F3FFF000C07F800019207D9F20>I<001C0000001C0000 +001C0000001C0000001C0000003C0000003C0000003C0000007C0000007C000000FC0000 +01FC000003FC000007FC00001FFFFE00FFFFFE00FFFFFE0003FC000003FC000003FC0000 +03FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC0000 +03FC000003FC000003FC000003FC000003FC038003FC038003FC038003FC038003FC0380 +03FC038003FC038001FC038001FC070000FE0700007F0E00003FFC000007F000192E7FAD +1F>I<01F80007E0FFF803FFE0FFF803FFE0FFF803FFE00FF8003FE007F8001FE007F800 +1FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001F +E007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE0 +07F8001FE007F8001FE007F8001FE007F8003FE007F8003FE003F8007FE003F8007FE001 +FC00DFF000FE039FFF007FFF1FFF000FFC1FFF28207D9F2D>I<FFFF1FFFE07FF8FFFF1F +FFE07FF8FFFF1FFFE07FF80FF000FE0007800FF800FE00078007F800FE00070007F8007F +00070003FC007F000E0003FC00FF800E0003FE00FF801E0001FE00FF801C0001FE01DFC0 +1C0001FF01DFC03C0000FF03DFE0380000FF838FE07800007F838FE07000007F8707F070 +00007FC707F0F000003FCF07F8E000003FCE03F8E000001FEE03F9C000001FFC01FDC000 +001FFC01FFC000000FFC01FF8000000FF800FF80000007F800FF00000007F0007F000000 +07F0007F00000003F0007E00000003E0003E00000001E0003C00000001C0001C00003520 +7E9F3A>119 D<7FFF807FFC7FFF807FFC7FFF807FFC03FE000F0001FE001E0000FF003C +0000FF807800007FC07800003FE0F000001FE1E000000FF3C000000FFF80000007FF0000 +0003FE00000001FE00000000FF00000000FF80000000FFC0000001FFC0000003DFE00000 +078FF00000078FF800000F07FC00001E03FC00003C01FE00007800FF0000F000FF8000E0 +007FC001E0003FC0FFFC01FFFFFFFC01FFFFFFFC01FFFF28207F9F2B>I +E /Fq 79 126 df<030600078F00078F00078F00078F00078F00078F007FFFC0FFFFE0FF +FFE07FFFC00F1E000F1E000F1E000F1E000F1E000F1E007FFFC0FFFFE0FFFFE07FFFC01E +3C001E3C001E3C001E3C001E3C001E3C000C1800131C7E9B18>35 +D<00C00001C00001C00001C00003F0000FFC003FFE007DCF0071C700E1C380E1C780E1C7 +80E1C780F1C00079C0003DC0001FE0000FF80003FC0001DE0001CF0001C70061C380F1C3 +80F1C380E1C380E1C70071C70079DE003FFE001FF80007E00001C00001C00001C00000C0 +0011247D9F18>I<3803007C07807C0780EE0F80EE0F00EE0F00EE1F00EE1E00EE1E00EE +3E007C3C007C3C00387C0000780000780000F80000F00001F00001E00001E00003E00003 +C00003C00007C0000783800787C00F87C00F0EE00F0EE01F0EE01E0EE01E0EE03E0EE03C +07C03C07C018038013247E9F18>I<387C7C7E3E0E0E0E1C1C38F8F0C0070E789B18>39 +D<007000F001E003C007800F001E001C00380038007000700070007000E000E000E000E0 +00E000E000E000E0007000700070007000380038001C001E000F00078003C001F000F000 +700C24799F18>I<6000F00078003C001E000F000780038001C001C000E000E000E000E0 +0070007000700070007000700070007000E000E000E000E001C001C0038007800F001E00 +3C007800F00060000C247C9F18>I<01C00001C00001C00001C000C1C180F1C780F9CF80 +7FFF001FFC0007F00007F0001FFC007FFF00F9CF80F1C780C1C18001C00001C00001C000 +01C00011147D9718>I<00600000F00000F00000F00000F00000F00000F00000F0007FFF +C0FFFFE0FFFFE07FFFC000F00000F00000F00000F00000F00000F00000F0000060001314 +7E9718>I<7FFF00FFFF80FFFF807FFF0011047D8F18>45 D<3078FCFC78300606778518> +I<01F00007FC000FFE001F1F001C07003803807803C07001C07001C0E000E0E000E0E000 +E0E000E0E000E0E000E0E000E0E000E0E000E0F001E07001C07001C07803C03803801C07 +001F1F000FFE0007FC0001F000131C7E9B18>48 D<01800380038007800F803F80FF80FB +80438003800380038003800380038003800380038003800380038003800380038003807F +FCFFFE7FFC0F1C7B9B18>I<03F0000FFE003FFF007C0F807003C0E001C0F000E0F000E0 +6000E00000E00000E00001C00001C00003C0000780000F00001E00003C0000780000F000 +01E00007C0000F80001E00E03C00E07FFFE0FFFFE07FFFE0131C7E9B18>I<07F8001FFE +003FFF007807807803C07801C03001C00001C00003C0000380000F0003FF0003FE0003FF +000007800003C00001C00000E00000E00000E0F000E0F000E0F001C0F003C07C07803FFF +001FFE0003F800131C7E9B18>I<001F00003F0000770000770000E70001E70001C70003 +87000787000707000E07001E07003C0700380700780700F00700FFFFF8FFFFF8FFFFF800 +0700000700000700000700000700000700007FF000FFF8007FF0151C7F9B18>I<1FFF80 +3FFF803FFF803800003800003800003800003800003800003800003800003BF8003FFE00 +3FFF003C07801803C00001C00000E00000E06000E0F000E0F000E0E001C07003C07C0F80 +3FFF001FFC0003F000131C7E9B18>I<007E0001FF0007FF800F83C01E03C01C03C03801 +80380000700000700000E1F800E7FE00FFFF00FE0780F803C0F001C0F000E0E000E0F000 +E07000E07000E07000E03801C03C03C01E07800FFF0007FE0001F800131C7E9B18>I<E0 +0000FFFFE0FFFFE0FFFFE0E003C0E00780000700000E00001E00001C0000380000380000 +700000700000E00000E00000E00001C00001C00001C00001C00003C00003800003800003 +8000038000038000038000038000131D7E9C18>I<03F8000FFE001FFF003E0F80380380 +7001C07001C07001C07001C03803803C07801FFF0007FC000FFE001F1F003C07807001C0 +F001E0E000E0E000E0E000E0E000E07001C07803C03E0F801FFF000FFE0003F800131C7E +9B18>I<03F0000FFC001FFE003C0F00780780700380E001C0E001C0E001C0E001E0E001 +E07001E07803E03C0FE01FFFE00FFEE003F0E00000E00001C00001C00001C03003807807 +80780F00783E003FFC001FF00007C000131C7E9B18>I<3078FCFC783000000000000000 +003078FCFC78300614779318>I<183C7E7E3C180000000000000000183C7E7E3E1E0E1C +3C78F060071A789318>I<000300000780001F80003F00007E0001FC0003F00007E0001F +C0003F00007E0000FC0000FC00007E00003F00001FC00007E00003F00001FC00007E0000 +3F00001F8000078000030011187D9918>I<7FFFC0FFFFE0FFFFE0FFFFE0000000000000 +000000000000FFFFE0FFFFE0FFFFE07FFFC0130C7E9318>I<600000F00000FC00007E00 +003F00001FC00007E00003F00001FC00007E00003F00001F80001F80003F00007E0001FC +0003F00007E0001FC0003F00007E0000FC0000F0000060000011187D9918>I<007C0001 +FE0007FF000F87801E03C03C1DC0387FC070FFE071E3E071C1E0E1C1E0E380E0E380E0E3 +80E0E380E0E380E0E380E0E1C1C071C1C071E3C070FF80387F003C1C001E00E00F83E007 +FFC001FF80007E00131C7E9B18>64 D<00700000F80000F80000D80000D80001DC0001DC +0001DC00018C00038E00038E00038E00038E000306000707000707000707000707000FFF +800FFF800FFF800E03800E03801C01C01C01C07F07F0FF8FF87F07F0151C7F9B18>I<FF +FC00FFFF00FFFF801C03C01C01C01C00E01C00E01C00E01C00E01C01E01C01C01C07C01F +FF801FFF001FFFC01C03C01C00E01C00F01C00701C00701C00701C00701C00F01C00E01C +03E0FFFFC0FFFF80FFFE00141C7F9B18>I<00F8E003FEE007FFE00F07E01E03E03C01E0 +3800E07000E07000E0700000E00000E00000E00000E00000E00000E00000E00000E00000 +7000007000E07000E03800E03C00E01E01C00F07C007FF8003FE0000F800131C7E9B18> +I<FFFFF0FFFFF0FFFFF01C00701C00701C00701C00701C00001C00001C0E001C0E001C0E +001FFE001FFE001FFE001C0E001C0E001C0E001C00001C00001C00381C00381C00381C00 +381C0038FFFFF8FFFFF8FFFFF8151C7F9B18>69 D<FFFFE0FFFFE0FFFFE01C00E01C00E0 +1C00E01C00E01C00001C00001C1C001C1C001C1C001FFC001FFC001FFC001C1C001C1C00 +1C1C001C00001C00001C00001C00001C00001C00001C0000FFC000FFC000FFC000131C7E +9B18>I<01F1C003FDC00FFFC01F0FC01C03C03803C03801C07001C07001C0700000E000 +00E00000E00000E00000E00000E00FF0E01FF0E00FF07001C07001C07003C03803C03803 +C01C07C01F0FC00FFFC003FDC001F1C0141C7E9B18>I<7F07F0FF8FF87F07F01C01C01C +01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01FFFC01FFFC01FFFC01C01C01C +01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C07F07F0FF8FF87F07F015 +1C7F9B18>I<7FFF00FFFF807FFF0001C00001C00001C00001C00001C00001C00001C000 +01C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000 +01C00001C00001C0007FFF00FFFF807FFF00111C7D9B18>I<7F07F0FF87F87F07F01C03 +C01C07801C07001C0E001C1E001C3C001C38001C70001CF0001DF0001DF0001FB8001FB8 +001F1C001E1C001C0E001C0E001C07001C07001C03801C03801C01C07F03F0FF87F87F03 +F0151C7F9B18>75 D<7FE000FFE0007FE0000E00000E00000E00000E00000E00000E0000 +0E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0070 +0E00700E00700E00700E00707FFFF0FFFFF07FFFF0141C7F9B18>I<FC01F8FE03F8FE03 +F83B06E03B06E03B06E03B06E03B8EE03B8EE0398CE0398CE039DCE039DCE039DCE038D8 +E038D8E038F8E03870E03870E03800E03800E03800E03800E03800E03800E0FE03F8FE03 +F8FE03F8151C7F9B18>I<7E07F0FF0FF87F07F01D81C01D81C01D81C01DC1C01CC1C01C +C1C01CE1C01CE1C01CE1C01C61C01C71C01C71C01C31C01C39C01C39C01C39C01C19C01C +19C01C1DC01C0DC01C0DC01C0DC07F07C0FF87C07F03C0151C7F9B18>I<0FF8003FFE00 +7FFF00780F00700700F00780E00380E00380E00380E00380E00380E00380E00380E00380 +E00380E00380E00380E00380E00380E00380E00380E00380F00780700700780F007FFF00 +3FFE000FF800111C7D9B18>I<FFFE00FFFF80FFFFC01C03C01C01E01C00E01C00701C00 +701C00701C00701C00701C00E01C01E01C03C01FFFC01FFF801FFE001C00001C00001C00 +001C00001C00001C00001C00001C0000FF8000FF8000FF8000141C7F9B18>I<7FF800FF +FE007FFF001C0F801C03801C03C01C01C01C01C01C01C01C03C01C03801C0F801FFF001F +FE001FFE001C0F001C07001C03801C03801C03801C03801C03801C039C1C039C1C039C7F +01F8FF81F87F00F0161C7F9B18>82 D<03F3801FFF803FFF807C0F80700780E00380E003 +80E00380E000007000007800003F00001FF00007FE0000FF00000F800003C00001C00000 +E00000E06000E0E000E0E001E0F001C0F80780FFFF80FFFE00E7F800131C7E9B18>I<7F +FFF8FFFFF8FFFFF8E07038E07038E07038E0703800700000700000700000700000700000 +700000700000700000700000700000700000700000700000700000700000700000700000 +700007FF0007FF0007FF00151C7F9B18>I<FF07F8FF07F8FF07F81C01C01C01C01C01C0 +1C01C00E03800E03800E03800E03800F0780070700070700070700070700038E00038E00 +038E00038E00018C0001DC0001DC0001DC0000D80000F80000F800007000151C7F9B18> +86 D<FE03F8FE03F8FE03F87000707000707000703800E03800E03800E03800E03800E0 +38F8E038F8E039DCE039DCE019DCC019DCC019DCC0198CC01D8DC01D8DC01D8DC01D8DC0 +0D8D800D05800F07800F07800E0380151C7F9B18>I<7F8FE07F9FE07F8FE00E07000F07 +00070E00078E00039C0003DC0001F80001F80000F00000F00000700000F00000F80001F8 +0001DC00039E00038E00070F000707000E07800E03801E03C07F07F0FF8FF87F07F0151C +7F9B18>I<FFF8FFF8FFF8E000E000E000E000E000E000E000E000E000E000E000E000E0 +00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000FF +F8FFF8FFF80D24779F18>91 D<600000F00000F00000F800007800007C00003C00003C00 +003E00001E00001F00000F00000F00000F800007800007C00003C00003C00003E00001E0 +0001F00000F00000F800007800007800007C00003C00003E00001E00001E00001F00000F +00000F8000078000078000030011247D9F18>I<FFF8FFF8FFF800380038003800380038 +003800380038003800380038003800380038003800380038003800380038003800380038 +0038003800380038003800380038FFF8FFF8FFF80D247F9F18>I<018007C01FF07EFCF8 +3EE00E0F067C9B18>I<7FFF00FFFF80FFFF807FFF0011047D7F18>I<1FE0003FF8007FFC +00781E00300E0000070000070000FF0007FF001FFF007F0700780700E00700E00700E007 +00F00F00781F003FFFF01FFBF007E1F014147D9318>97 D<7E0000FE00007E00000E0000 +0E00000E00000E00000E00000E3E000EFF800FFFC00FC1E00F80E00F00700E00700E0038 +0E00380E00380E00380E00380E00380F00700F00700F80E00FC1E00FFFC00EFF80063E00 +151C809B18>I<01FE0007FF001FFF803E0780380300700000700000E00000E00000E000 +00E00000E00000E000007000007001C03801C03E03C01FFF8007FF0001FC0012147D9318 +>I<001F80003F80001F8000038000038000038000038000038003E3800FFB801FFF803C +1F80380F80700780700380E00380E00380E00380E00380E00380E0038070078070078038 +0F803C1F801FFFF00FFBF803E3F0151C7E9B18>I<01F00007FC001FFE003E0F00380780 +700380700380E001C0E001C0FFFFC0FFFFC0FFFFC0E000007000007001C03801C03E03C0 +1FFF8007FF0001FC0012147D9318>I<001F80007FC000FFE000E1E001C0C001C00001C0 +0001C0007FFFC0FFFFC0FFFFC001C00001C00001C00001C00001C00001C00001C00001C0 +0001C00001C00001C00001C00001C00001C0007FFF007FFF007FFF00131C7F9B18>I<01 +E1F007FFF80FFFF81E1E301C0E003807003807003807003807003807001C0E001E1E001F +FC001FF80039E0003800001C00001FFE001FFFC03FFFE07801F0700070E00038E00038E0 +0038E000387800F07E03F01FFFC00FFF8001FC00151F7F9318>I<7E0000FE00007E0000 +0E00000E00000E00000E00000E00000E3E000EFF800FFFC00FC1C00F80E00F00E00E00E0 +0E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E07FC3FCFFE7FE +7FC3FC171C809B18>I<03800007C00007C00007C0000380000000000000000000000000 +007FC000FFC0007FC00001C00001C00001C00001C00001C00001C00001C00001C00001C0 +0001C00001C00001C00001C00001C000FFFF00FFFF80FFFF00111D7C9C18>I<0038007C +007C007C003800000000000000000FFC1FFC0FFC001C001C001C001C001C001C001C001C +001C001C001C001C001C001C001C001C001C001C001C001C001C001C6038F078FFF07FE0 +3F800E277E9C18>I<FE0000FE0000FE00000E00000E00000E00000E00000E00000E3FF0 +0E7FF00E3FF00E07800E0F000E1E000E3C000E78000EF0000FF8000FFC000F9C000F0E00 +0E0F000E07000E03800E03C0FFC7F8FFC7F8FFC7F8151C7F9B18>I<7FE000FFE0007FE0 +0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0 +0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0007FFFC0FFFF +E07FFFC0131C7E9B18>I<7CE0E000FFFBF8007FFFF8001F1F1C001E1E1C001E1E1C001C +1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C +1C1C001C1C1C007F1F1F00FFBFBF807F1F1F001914819318>I<7E3E00FEFF807FFFC00F +C1C00F80E00F00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E +00E00E00E07FC3FCFFE7FE7FC3FC1714809318>I<01F0000FFE001FFF003E0F80380380 +7001C07001C0E000E0E000E0E000E0E000E0E000E0F001E07001C07803C03C07803E0F80 +1FFF000FFE0001F00013147E9318>I<7E3E00FEFF807FFFC00FC1E00F80E00F00700E00 +700E00380E00380E00380E00380E00380E00380F00700F00700F80E00FC1E00FFFC00EFF +800E3E000E00000E00000E00000E00000E00000E00000E00007FC000FFE0007FC000151E +809318>I<7F87E0FF9FF07FBFF803F87803F03003E00003C00003C00003800003800003 +80000380000380000380000380000380000380007FFE00FFFF007FFE0015147F9318> +114 D<07F7003FFF007FFF00780F00E00700E00700E007007C00007FE0001FFC0003FE00 +001F00600780E00380E00380F00380F80F00FFFF00FFFC00E7F00011147D9318>I<0180 +000380000380000380000380007FFFC0FFFFC0FFFFC00380000380000380000380000380 +000380000380000380000380000380400380E00380E00380E001C1C001FFC000FF80003E +0013197F9818>I<7E07E0FE0FE07E07E00E00E00E00E00E00E00E00E00E00E00E00E00E +00E00E00E00E00E00E00E00E00E00E00E00E01E00F03E007FFFC03FFFE01FCFC17148093 +18>I<7F8FF0FF8FF87F8FF01E03C00E03800E03800E0380070700070700070700038E00 +038E00038E00038E0001DC0001DC0001DC0000F80000F80000700015147F9318>I<FF8F +F8FF8FF8FF8FF83800E03800E03800E01C01C01C01C01C71C01CF9C01CF9C01CD9C01CD9 +C00DDD800DDD800DDD800D8D800F8F800F8F8007070015147F9318>I<7F8FF07F9FF07F +8FF0070700078E00039E0001DC0001F80000F80000700000F00000F80001DC00039E0003 +8E000707000F07807F8FF0FF8FF87F8FF015147F9318>I<7F8FF0FF8FF87F8FF00E01C0 +0E03800E0380070380070700070700038700038600038E0001CE0001CE0000CC0000CC00 +00DC0000780000780000780000700000700000700000F00000E00079E0007BC0007F8000 +3F00001E0000151E7F9318>I<3FFFF07FFFF07FFFF07001E07003C0700780000F00001E +00003C0000F80001F00003C0000780000F00701E00703C0070780070FFFFF0FFFFF0FFFF +F014147F9318>I<0007E0001FE0007FE000780000E00000E00000E00000E00000E00000 +E00000E00000E00000E00000E00000E00001E0007FC000FF8000FF80007FC00001E00000 +E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000780000 +7FE0001FE00007E013247E9F18>I<60F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 +F0F0F0F0F0F0F0F0F0F0F0F0F0F0600424769F18>I<7C0000FF0000FFC00003C00000E0 +0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000F000007F +C0003FE0003FE0007FC000F00000E00000E00000E00000E00000E00000E00000E00000E0 +0000E00000E00000E00003C000FFC000FF00007C000013247E9F18>I +E /Fr 4 107 df<FFFFFFC0FFFFFFC01A027C8B23>0 D<70F8F8F87005057C8D0D>I<00 +01FE00000007FF8000001E01E000007800780000E0001C00018000060003000003000600 +0001800C000000C00C000000C01800000060300000003030000000303000000030600000 +001860000000186000000018C00000000CC00000000CC00000000CC00000000CC0000000 +0CC00000000CC00000000CC00000000CC00000000C600000001860000000186000000018 +30000000303000000030300000003018000000600C000000C00C000000C0060000018003 +00000300018000060000E0001C000078007800001E01E0000007FF80000001FE0000262B +7DA02D>13 D<C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 +C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0022D7BA10D>106 D E /Fs +58 123 df<0001FF0000001FFFC000007F81E00000FC01E00001F807F00003F807F00007 +F007F00007F007F00007F007F00007F007F00007F001C00007F000000007F000000007F0 +00000007F03FF800FFFFFFF800FFFFFFF800FFFFFFF80007F003F80007F003F80007F003 +F80007F003F80007F003F80007F003F80007F003F80007F003F80007F003F80007F003F8 +0007F003F80007F003F80007F003F80007F003F80007F003F80007F003F80007F003F800 +07F003F80007F003F80007F003F80007F003F8007FFF3FFF807FFF3FFF807FFF3FFF8021 +2A7FA925>12 D<3C007F00FF80FF80FFC0FFC0FFC07FC03EC000C000C001800180018003 +00030006000E001C00380030000A157B8813>44 D<1C007F007F00FF80FF80FF807F007F +001C0009097B8813>46 D<000E00001E00007E0007FE00FFFE00FFFE00F8FE0000FE0000 +FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000 +FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000 +FE0000FE0000FE0000FE007FFFFE7FFFFE7FFFFE17277BA622>49 +D<00FF800007FFF0000FFFFC001E03FE003800FF807C003F80FE003FC0FF001FC0FF001F +E0FF000FE0FF000FE07E000FE03C001FE000001FE000001FC000001FC000003F8000003F +0000007E000000FC000000F8000001F0000003E00000078000000F0000001E0000003C00 +E0007000E000E000E001C001C0038001C0060001C00FFFFFC01FFFFFC03FFFFFC07FFFFF +C0FFFFFF80FFFFFF80FFFFFF801B277DA622>I<007F800003FFF00007FFFC000F80FE00 +1F007F003F807F003F803F803F803F803F803F801F803F801F003F8000007F0000007F00 +00007E000000FC000001F8000007F00000FFC00000FFC0000001F80000007E0000003F00 +00003F8000001FC000001FC000001FE000001FE03C001FE07E001FE0FF001FE0FF001FE0 +FF001FC0FF003FC0FE003F807C007F003F00FE001FFFFC0007FFF00000FF80001B277DA6 +22>I<00000E0000001E0000003E0000007E000000FE000000FE000001FE000003FE0000 +077E00000E7E00000E7E00001C7E0000387E0000707E0000E07E0000E07E0001C07E0003 +807E0007007E000E007E000E007E001C007E0038007E0070007E00E0007E00FFFFFFF8FF +FFFFF8FFFFFFF80000FE000000FE000000FE000000FE000000FE000000FE000000FE0000 +00FE00007FFFF8007FFFF8007FFFF81D277EA622>I<180003001F801F001FFFFE001FFF +FC001FFFF8001FFFF0001FFFC0001FFF00001C0000001C0000001C0000001C0000001C00 +00001C0000001C0000001C7FC0001DFFF8001F80FC001E003F0008003F0000001F800000 +1FC000001FC000001FE000001FE018001FE07C001FE0FE001FE0FE001FE0FE001FE0FE00 +1FC0FC001FC078003F8078003F803C007F001F01FE000FFFFC0003FFF00000FF80001B27 +7DA622>I<0007F800003FFE0000FFFF0001FC078003F00FC007C01FC00F801FC01F801F +C01F001FC03F000F803F0000007E0000007E0000007E000000FE020000FE1FF000FE3FFC +00FE603E00FE801F00FF801F80FF000FC0FF000FC0FE000FE0FE000FE0FE000FE0FE000F +E07E000FE07E000FE07E000FE07E000FE03E000FE03F000FC01F000FC01F001F800F801F +0007E07E0003FFFC0001FFF800003FC0001B277DA622>I<380000003E0000003FFFFFF0 +3FFFFFF03FFFFFF07FFFFFE07FFFFFC07FFFFF807FFFFF0070000E0070000E0070001C00 +E0003800E0007000E000E0000001E0000001C000000380000007800000070000000F0000 +001F0000001E0000003E0000003E0000007E0000007C0000007C000000FC000000FC0000 +00FC000000FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC0000 +00F80000007000001C297CA822>I<003FC00001FFF00003FFFC0007C07E000F003F001E +001F001E000F803E000F803E000F803F000F803F800F803FC00F803FF01F001FFC1E001F +FE3C000FFFF8000FFFE00007FFF80001FFFC0001FFFE0007FFFF000F0FFF801E03FFC03E +01FFC07C007FE07C001FE0F8000FE0F80007E0F80003E0F80003E0F80003E0F80003C07C +0003C07E0007803F000F001FC03F000FFFFC0003FFF800007FC0001B277DA622>I<007F +800001FFF00007FFF8000FC0FC001F803E003F001F007E001F807E001F807E000F80FE00 +0FC0FE000FC0FE000FC0FE000FE0FE000FE0FE000FE0FE000FE0FE000FE07E001FE07E00 +1FE03F003FE01F002FE00F80CFE007FF8FE001FF0FE000080FE000000FC000000FC00000 +0FC000001F803E001F807F001F807F003F007F003E007F007E007E00FC003E03F8001FFF +E0000FFF800001FE00001B277DA622>I<00000780000000000780000000000FC0000000 +000FC0000000000FC0000000001FE0000000001FE0000000003FF0000000003FF0000000 +003FF00000000077F80000000077F800000000F7FC00000000E3FC00000000E3FC000000 +01C1FE00000001C1FE00000003C1FF0000000380FF0000000380FF00000007007F800000 +07007F8000000F007FC000000E003FC000000E003FC000001C001FE000001C001FE00000 +3FFFFFF000003FFFFFF000003FFFFFF00000700007F80000700007F80000F00007FC0000 +E00003FC0000E00003FC0001C00001FE0001C00001FE0003C00001FF00FFFE003FFFFCFF +FE003FFFFCFFFE003FFFFC2E297EA833>65 D<FFFFFFF800FFFFFFFF00FFFFFFFFC003F8 +001FE003F8000FF003F80007F803F80003F803F80003FC03F80003FC03F80001FC03F800 +01FC03F80001FC03F80003FC03F80003F803F80003F803F80007F003F8000FF003F8001F +C003F800FF8003FFFFFE0003FFFFFFC003F8000FF003F80003F803F80001FC03F80001FE +03F80000FE03F80000FE03F80000FF03F80000FF03F80000FF03F80000FF03F80000FF03 +F80000FF03F80000FE03F80001FE03F80003FC03F80007FC03F8001FF8FFFFFFFFE0FFFF +FFFFC0FFFFFFFE0028297DA830>I<00007FE0030007FFFC07001FFFFF0F007FF00F9F00 +FF0001FF01FC0000FF03F800007F07F000003F0FE000001F1FC000001F1FC000000F3F80 +00000F3F800000077F800000077F800000077F00000000FF00000000FF00000000FF0000 +0000FF00000000FF00000000FF00000000FF00000000FF00000000FF000000007F000000 +007F800000007F800000073F800000073F800000071FC00000071FC000000E0FE000000E +07F000001C03F800003C01FC00007800FF0001F0007FF007C0001FFFFF800007FFFE0000 +007FF00028297CA831>I<FFFFFFFC0000FFFFFFFF8000FFFFFFFFE00003FC001FF80003 +FC0003FC0003FC0000FE0003FC00007F0003FC00003F8003FC00001FC003FC00001FC003 +FC00000FE003FC00000FE003FC000007F003FC000007F003FC000007F003FC000007F003 +FC000007F803FC000007F803FC000007F803FC000007F803FC000007F803FC000007F803 +FC000007F803FC000007F803FC000007F803FC000007F803FC000007F003FC000007F003 +FC000007F003FC00000FE003FC00000FE003FC00000FC003FC00001FC003FC00003F8003 +FC00007F0003FC0000FF0003FC0003FC0003FC001FF800FFFFFFFFF000FFFFFFFF8000FF +FFFFFC00002D297EA834>I<FFFFFFFFE0FFFFFFFFE0FFFFFFFFE003FC001FE003FC0007 +F003FC0001F003FC0001F003FC0000F003FC00007003FC00007003FC00007003FC01C078 +03FC01C03803FC01C03803FC01C03803FC03C00003FC03C00003FC0FC00003FFFFC00003 +FFFFC00003FFFFC00003FC0FC00003FC03C00003FC03C00003FC01C00E03FC01C00E03FC +01C00E03FC01C01C03FC00001C03FC00001C03FC00001C03FC00003C03FC00003803FC00 +007803FC0000F803FC0001F803FC0003F803FC001FF8FFFFFFFFF0FFFFFFFFF0FFFFFFFF +F027297EA82C>I<FFFFFFFFC0FFFFFFFFC0FFFFFFFFC003FC003FC003FC000FE003FC00 +03E003FC0001E003FC0001E003FC0000E003FC0000E003FC0000E003FC0000F003FC01C0 +7003FC01C07003FC01C07003FC01C00003FC03C00003FC03C00003FC0FC00003FFFFC000 +03FFFFC00003FFFFC00003FC0FC00003FC03C00003FC03C00003FC01C00003FC01C00003 +FC01C00003FC01C00003FC00000003FC00000003FC00000003FC00000003FC00000003FC +00000003FC00000003FC00000003FC000000FFFFFC0000FFFFFC0000FFFFFC000024297E +A82A>I<00007FE003000007FFFC0700001FFFFF0F00007FF00F9F0000FF0001FF0001FC +0000FF0003F800007F0007F000003F000FE000001F001FC000001F001FC000000F003F80 +00000F003F80000007007F80000007007F80000007007F0000000000FF0000000000FF00 +00000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF00 +00000000FF0000FFFFF87F0000FFFFF87F8000FFFFF87F800000FF003F800000FF003F80 +0000FF001FC00000FF001FC00000FF000FE00000FF0007F00000FF0003F80000FF0001FC +0000FF0000FF0001FF00007FF007FF00001FFFFF9F000007FFFE0F0000007FF003002D29 +7CA835>I<FFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFF03FC00003FC003FC00003FC003 +FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC003 +FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC003 +FC00003FC003FFFFFFFFC003FFFFFFFFC003FFFFFFFFC003FC00003FC003FC00003FC003 +FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC003 +FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC003 +FC00003FC003FC00003FC003FC00003FC0FFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFF30 +297EA835>I<FFFFFCFFFFFCFFFFFC01FE0001FE0001FE0001FE0001FE0001FE0001FE00 +01FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE00 +01FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE00 +01FE0001FE0001FE0001FE00FFFFFCFFFFFCFFFFFC16297FA819>I<FFFFF001FFFCFFFF +F001FFFCFFFFF001FFFC03FC00001E0003FC00003C0003FC0000780003FC0000F00003FC +0001E00003FC0003C00003FC0007000003FC001E000003FC003C000003FC0078000003FC +00F0000003FC01E0000003FC0380000003FC07C0000003FC1FC0000003FC3FE0000003FC +7FF0000003FCFFF8000003FDE7F8000003FF83FC000003FF03FE000003FE01FF000003FC +00FF000003FC007F800003FC007FC00003FC003FE00003FC001FE00003FC000FF00003FC +000FF80003FC0007F80003FC0003FC0003FC0001FE0003FC0001FF0003FC0000FF0003FC +00007F80FFFFF00FFFFEFFFFF00FFFFEFFFFF00FFFFE2F297EA835>75 +D<FFFFFC0000FFFFFC0000FFFFFC000003FC00000003FC00000003FC00000003FC000000 +03FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003 +FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC +00000003FC00000003FC00000003FC0001C003FC0001C003FC0001C003FC0001C003FC00 +03C003FC00038003FC00038003FC00078003FC00078003FC000F8003FC000F8003FC001F +8003FC007F8003FC01FF00FFFFFFFF00FFFFFFFF00FFFFFFFF0022297EA828>I<FFFE00 +00003FFF80FFFE0000003FFF80FFFF0000007FFF8003FF0000007FE00003FF0000007FE0 +0003BF800000EFE00003BF800000EFE000039FC00001CFE000039FC00001CFE000038FE0 +00038FE000038FE000038FE000038FE000038FE0000387F000070FE0000387F000070FE0 +000383F8000E0FE0000383F8000E0FE0000381FC001C0FE0000381FC001C0FE0000381FC +001C0FE0000380FE00380FE0000380FE00380FE00003807F00700FE00003807F00700FE0 +0003803F80E00FE00003803F80E00FE00003803F80E00FE00003801FC1C00FE00003801F +C1C00FE00003800FE3800FE00003800FE3800FE000038007F7000FE000038007F7000FE0 +00038007F7000FE000038003FE000FE000038003FE000FE000038001FC000FE000038001 +FC000FE000038000F8000FE000FFFE00F803FFFF80FFFE00F803FFFF80FFFE007003FFFF +8039297DA840>I<FFFC00007FFFFFFE00007FFFFFFF00007FFF03FF800001C003FFC000 +01C003BFE00001C0039FE00001C0039FF00001C0038FF80001C00387FC0001C00383FE00 +01C00381FF0001C00380FF8001C003807F8001C003807FC001C003803FE001C003801FF0 +01C003800FF801C0038007FC01C0038003FC01C0038003FE01C0038001FF01C0038000FF +81C00380007FC1C00380003FE1C00380001FF1C00380000FF1C00380000FF9C003800007 +FDC003800003FFC003800001FFC003800000FFC0038000007FC0038000007FC003800000 +3FC0038000001FC0038000000FC00380000007C0FFFE000003C0FFFE000001C0FFFE0000 +01C030297EA835>I<0000FFC00000000FFFFC0000003F807F000000FE001FC00001F800 +07E00003F00003F00007E00001F8000FE00001FC001FC00000FE001FC00000FE003F8000 +007F003F8000007F007F8000007F807F0000003F807F0000003F807F0000003F80FF0000 +003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000 +003FC0FF0000003FC0FF0000003FC0FF0000003FC07F0000003F807F8000007F807F8000 +007F803F8000007F003F8000007F001FC00000FE001FC00000FE000FE00001FC0007F000 +03F80003F80007F00001FC000FE00000FE001FC000003FC0FF0000000FFFFC00000000FF +C000002A297CA833>I<FFFFFFF800FFFFFFFF00FFFFFFFFC003FC003FE003FC0007F003 +FC0003F803FC0003FC03FC0001FC03FC0001FE03FC0001FE03FC0001FE03FC0001FE03FC +0001FE03FC0001FE03FC0001FE03FC0001FC03FC0003FC03FC0003F803FC0007F003FC00 +3FE003FFFFFF8003FFFFFE0003FC00000003FC00000003FC00000003FC00000003FC0000 +0003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC000000 +03FC00000003FC00000003FC00000003FC000000FFFFF00000FFFFF00000FFFFF0000027 +297EA82E>I<FFFFFFE00000FFFFFFFE0000FFFFFFFF800003FC003FE00003FC000FF000 +03FC0007F80003FC0003FC0003FC0001FC0003FC0001FE0003FC0001FE0003FC0001FE00 +03FC0001FE0003FC0001FE0003FC0001FE0003FC0001FC0003FC0003F80003FC0007F800 +03FC000FE00003FC003FC00003FFFFFE000003FFFFFE000003FC00FF800003FC003FC000 +03FC001FE00003FC000FF00003FC0007F80003FC0007F80003FC0007F80003FC0007F800 +03FC0007F80003FC0007F80003FC0007F80003FC0007F80003FC0007F80003FC0007F80E +03FC0007F80E03FC0003F80E03FC0001FC1CFFFFF000FE1CFFFFF0007FF8FFFFF0000FE0 +2F297EA832>82 D<00FF00C003FFE1C00FFFF9C01F80FFC03F003FC03E000FC07C0007C0 +7C0007C0FC0003C0FC0003C0FC0001C0FE0001C0FE0001C0FF000000FFC000007FFC0000 +7FFFE0003FFFF8001FFFFE001FFFFF0007FFFF8003FFFFC000FFFFC0000FFFE000007FE0 +00001FF000000FF0000007F0E00003F0E00003F0E00003F0E00003F0F00003E0F00003E0 +F80007E0FC0007C0FF000F80FFE01F80E3FFFF00E1FFFC00C01FF0001C297CA825>I<7F +FFFFFFFF807FFFFFFFFF807FFFFFFFFF807F807F807F807C007F800F8078007F80078078 +007F80078070007F800380F0007F8003C0F0007F8003C0E0007F8001C0E0007F8001C0E0 +007F8001C0E0007F8001C0E0007F8001C000007F80000000007F80000000007F80000000 +007F80000000007F80000000007F80000000007F80000000007F80000000007F80000000 +007F80000000007F80000000007F80000000007F80000000007F80000000007F80000000 +007F80000000007F80000000007F80000000007F80000000007F80000000007F80000000 +007F80000000FFFFFFC00000FFFFFFC00000FFFFFFC0002A287EA72F>I<FFFFF000FFFE +FFFFF000FFFEFFFFF000FFFE03FC0000038003FC0000038003FC0000038003FC00000380 +03FC0000038003FC0000038003FC0000038003FC0000038003FC0000038003FC00000380 +03FC0000038003FC0000038003FC0000038003FC0000038003FC0000038003FC00000380 +03FC0000038003FC0000038003FC0000038003FC0000038003FC0000038003FC00000380 +03FC0000038003FC0000038003FC0000038003FC0000038003FC0000038003FC00000380 +01FC0000070001FE0000070000FE00000E00007F00000E00003F00003C00001FC0007800 +000FF003F0000007FFFFE0000000FFFF800000001FFC00002F297EA834>I<FFFFF0007F +FFFFFFF0007FFFFFFFF0007FFF03FE000001C001FE0000038001FE0000038000FF000007 +0000FF0000070000FF80000F00007F80000E00007FC0000E00003FC0001C00003FE0001C +00001FE0003800001FE0003800001FF0007800000FF0007000000FF800F0000007F800E0 +000007FC00E0000003FC01C0000003FC01C0000003FE03C0000001FE0380000001FF0780 +000000FF0700000000FF87000000007F8E000000007F8E000000007FDE000000003FDC00 +0000003FFC000000001FF8000000001FF8000000000FF0000000000FF0000000000FF000 +00000007E00000000007E00000000003C00000000003C0000030297FA833>I<FFFFE0FF +FFE01FFFC0FFFFE0FFFFE01FFFC0FFFFE0FFFFE01FFFC003FC0003FC0000700003FC0003 +FC0000700003FE0003FE0000F00001FE0001FE0000E00001FE0001FE0000E00001FF0001 +FF0001E00000FF0001FF0001C00000FF0001FF0001C000007F8003FF80038000007F8003 +FF80038000007FC007FFC0078000003FC0073FC0070000003FC0073FC0070000003FE00F +3FE00F0000001FE00E1FE00E0000001FE00E1FE00E0000000FF01C0FF01C0000000FF01C +0FF01C0000000FF01C0FF81C00000007F83807F83800000007F83807F83800000007FC78 +07FC7800000003FC7003FC7000000003FC7003FC7000000003FEF003FEF000000001FEE0 +01FEE000000001FEE001FEE000000000FFC000FFC000000000FFC000FFC000000000FFC0 +00FFC0000000007F80007F80000000007F80007F80000000007F80007F80000000003F00 +003F00000000003F00003F00000000003F00003F00000000001E00001E00000000001E00 +001E00000042297FA845>I<7FFFF81FFFE07FFFF81FFFE07FFFF81FFFE001FF0000F000 +00FF8001E00000FFC001C000007FC003C000003FE0078000001FF00F0000001FF00E0000 +000FF81E00000007FC3C00000007FC3800000003FE7800000001FFF000000001FFE00000 +0000FFC0000000007FC0000000003FE0000000003FE0000000001FF0000000001FF80000 +00003FF8000000003FFC000000007BFE00000000F3FE00000001E1FF00000001C0FF8000 +0003C07FC0000007807FC000000F003FE000000E001FF000001E001FF000003C000FF800 +00380007FC0000780007FC0000F00003FE0001E00001FF00FFFF003FFFFCFFFF003FFFFC +FFFF003FFFFC2E297EA833>I<03FF80000FFFF0001F01FC003F80FE003F807F003F803F +003F803F801F003F8000003F8000003F8000003F8000003F80003FFF8001FC3F800FE03F +801F803F803F003F807E003F80FC003F80FC003F80FC003F80FC003F80FC005F807E00DF +803F839FFC1FFE0FFC03F803FC1E1B7E9A21>97 D<FFE00000FFE00000FFE000000FE000 +000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000 +000FE000000FE000000FE1FE000FE7FF800FFE07E00FF803F00FF001F80FE000FC0FE000 +FC0FE0007E0FE0007E0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE000 +7F0FE0007F0FE0007E0FE0007E0FE0007E0FE000FC0FE000FC0FF001F80FF803F00F9C0F +E00F0FFF800E01FC00202A7EA925>I<003FF00001FFFC0003F03E000FC07F001F807F00 +3F007F003F007F007F003E007E0000007E000000FE000000FE000000FE000000FE000000 +FE000000FE000000FE0000007E0000007E0000007F0000003F0003803F8003801F800700 +0FE00E0003F83C0001FFF800003FC000191B7E9A1E>I<00007FF000007FF000007FF000 +0007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F000 +0007F0000007F0000007F0003F87F001FFF7F007F03FF00FC00FF01F8007F03F0007F03F +0007F07E0007F07E0007F07E0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE +0007F0FE0007F0FE0007F07E0007F07E0007F03F0007F03F0007F01F800FF00FC01FF007 +E07FFF01FFE7FF007F87FF202A7EA925>I<003FC00001FFF00003E07C000F803E001F80 +1F001F001F003F000F807E000F807E000FC07E000FC0FE0007C0FE0007C0FFFFFFC0FFFF +FFC0FE000000FE000000FE0000007E0000007E0000007F0000003F0001C01F0001C00F80 +038007C0070003F01E0000FFFC00003FE0001A1B7E9A1F>I<0007F8003FFC007E3E01FC +7F03F87F03F07F07F07F07F03E07F00007F00007F00007F00007F00007F00007F000FFFF +C0FFFFC0FFFFC007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0 +0007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0007FFF +807FFF807FFF80182A7EA915>I<007F80F001FFE3F807C0FE1C0F807C7C1F003E7C1F00 +3E103F003F003F003F003F003F003F003F003F003F003F003F001F003E001F003E000F80 +7C0007C0F80005FFE0000C7F8000180000001C0000001C0000001E0000001FFFF8001FFF +FF000FFFFFC007FFFFE003FFFFF00FFFFFF03E0007F07C0001F8F80000F8F80000F8F800 +00F8F80000F87C0001F07C0001F03F0007E00FC01F8007FFFF00007FF0001E287E9A22> +I<FFE00000FFE00000FFE000000FE000000FE000000FE000000FE000000FE000000FE000 +000FE000000FE000000FE000000FE000000FE000000FE000000FE07E000FE1FF800FE30F +C00FE40FE00FE807E00FF807F00FF007F00FF007F00FE007F00FE007F00FE007F00FE007 +F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007 +F00FE007F00FE007F00FE007F0FFFE3FFFFFFE3FFFFFFE3FFF202A7DA925>I<07000F80 +1FC03FE03FE03FE01FC00F8007000000000000000000000000000000FFE0FFE0FFE00FE0 +0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0 +0FE00FE0FFFEFFFEFFFE0F2B7EAA12>I<FFE00000FFE00000FFE000000FE000000FE000 +000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000 +000FE000000FE03FF80FE03FF80FE03FF80FE007000FE00E000FE03C000FE078000FE0F0 +000FE1E0000FE3C0000FE780000FEFC0000FFFE0000FFFE0000FF7F0000FE3F8000FC1FC +000FC1FC000FC0FE000FC07F000FC07F000FC03F800FC01FC00FC01FC0FFFC7FFCFFFC7F +FCFFFC7FFC1E2A7EA923>107 D<FFE0FFE0FFE00FE00FE00FE00FE00FE00FE00FE00FE0 +0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0 +0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFFEFFFEFFFE0F2A7EA912>I<FFC07F +001FC000FFC1FFC07FF000FFC307E0C1F8000FC407F101FC000FC803F200FC000FD803FE +00FE000FD003FC00FE000FD003FC00FE000FE003F800FE000FE003F800FE000FE003F800 +FE000FE003F800FE000FE003F800FE000FE003F800FE000FE003F800FE000FE003F800FE +000FE003F800FE000FE003F800FE000FE003F800FE000FE003F800FE000FE003F800FE00 +0FE003F800FE000FE003F800FE000FE003F800FE00FFFE3FFF8FFFE0FFFE3FFF8FFFE0FF +FE3FFF8FFFE0331B7D9A38>I<FFC07E00FFC1FF80FFC30FC00FC40FE00FC807E00FD807 +F00FD007F00FD007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007 +F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007 +F0FFFE3FFFFFFE3FFFFFFE3FFF201B7D9A25>I<003FE00001FFFC0003F07E000FC01F80 +1F800FC03F0007E03F0007E07E0003F07E0003F07E0003F0FE0003F8FE0003F8FE0003F8 +FE0003F8FE0003F8FE0003F8FE0003F8FE0003F87E0003F07E0003F03F0007E03F0007E0 +1F800FC00FC01F8007F07F0001FFFC00003FE0001D1B7E9A22>I<FFE1FE00FFE7FF80FF +FE0FE00FF803F00FF001F80FE001FC0FE000FC0FE000FE0FE000FE0FE0007F0FE0007F0F +E0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007E0FE000FE0FE000FE0F +E000FC0FE001FC0FF001F80FF803F00FFC0FE00FEFFF800FE1FC000FE000000FE000000F +E000000FE000000FE000000FE000000FE000000FE000000FE00000FFFE0000FFFE0000FF +FE000020277E9A25>I<FFC3E0FFC7F8FFCC7C0FD8FE0FD0FE0FD0FE0FF0FE0FE07C0FE0 +000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0 +000FE0000FE0000FE000FFFF00FFFF00FFFF00171B7E9A1B>114 +D<03FE300FFFF03E03F07800F07000F0F00070F00070F80070FE0000FFE0007FFF007FFF +C03FFFE01FFFF007FFF800FFF80007FC0000FCE0007CE0003CF0003CF00038F80038FC00 +70FF01E0E7FFC0C1FF00161B7E9A1B>I<00700000700000700000700000F00000F00000 +F00001F00003F00003F00007F0001FFFE0FFFFE0FFFFE007F00007F00007F00007F00007 +F00007F00007F00007F00007F00007F00007F00007F00007F00007F07007F07007F07007 +F07007F07007F07007F07003F0E001F8C000FFC0003F0014267FA51A>I<FFE07FF0FFE0 +7FF0FFE07FF00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE0 +07F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE0 +07F00FE007F00FE00FF00FE00FF007E017F003F067FF01FFC7FF007F87FF201B7D9A25> +I<FFFE07FFFFFE07FFFFFE07FF07F000E007F000E007F801E003F801C003F801C001FC03 +8001FC038001FE078000FE070000FF0F00007F0E00007F0E00003F9C00003F9C00003FFC +00001FF800001FF800000FF000000FF000000FF0000007E0000007E0000003C0000003C0 +00201B7F9A23>I<FFFC7FFC1FFCFFFC7FFC1FFCFFFC7FFC1FFC0FE00FE001C007F007E0 +038007F007E0038007F807F0078003F807F0070003F807F8070001FC0FF80E0001FC0FF8 +0E0001FE1FFC1E0000FE1CFC1C0000FE1CFE1C0000FF387E3C00007F387E3800007F787F +3800003FF03F7000003FF03F7000003FE01FF000001FE01FE000001FE01FE000000FC00F +C000000FC00FC000000FC00FC0000007800780000007800780002E1B7F9A31>I<FFFC1F +FEFFFC1FFEFFFC1FFE07F0078003F8070001FC0F0001FE1E0000FE3C00007F7800003FF8 +00003FF000001FE000000FE0000007F0000007F800000FF800001FFC00003DFE000038FF +0000787F0000F03F8001E03FC003C01FE003800FE0FFF03FFFFFF03FFFFFF03FFF201B7F +9A23>I<FFFE07FFFFFE07FFFFFE07FF07F000E007F000E007F801E003F801C003F801C0 +01FC038001FC038001FE078000FE070000FF0F00007F0E00007F0E00003F9C00003F9C00 +003FFC00001FF800001FF800000FF000000FF0000007F0000007E0000007E0000003C000 +0003C000000380000003800000078000380700007C070000FE0E0000FE0E0000FE1C0000 +FE3800007C7000003FE000000F80000020277F9A23>I<3FFFFF3FFFFF3F00FE3C01FE38 +03FC7803F87807F0700FF0700FE0701FC0003FC0003F80007F0000FF0000FE0001FC0703 +FC0703F80707F0070FF00F0FE00F1FC00E3FC01E7F803E7F00FEFFFFFEFFFFFE181B7E9A +1E>I E /Ft 81 125 df<001F83E000F06E3001C078780380F8780300F0300700700007 +0070000700700007007000070070000700700007007000FFFFFF80070070000700700007 +007000070070000700700007007000070070000700700007007000070070000700700007 +0070000700700007007000070070000700700007007000070070007FE3FF001D20809F1B +>11 D<003F0000E0C001C0C00381E00701E00701E0070000070000070000070000070000 +070000FFFFE00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E0 +0700E00700E00700E00700E00700E00700E00700E00700E07FC3FE1720809F19>I<003F +E000E0E001C1E00381E00700E00700E00700E00700E00700E00700E00700E00700E0FFFF +E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700 +E00700E00700E00700E00700E00700E00700E07FE7FE1720809F19>I<001F81F80000F0 +4F040001C07C06000380F80F000300F00F000700F00F0007007000000700700000070070 +0000070070000007007000000700700000FFFFFFFF000700700700070070070007007007 +000700700700070070070007007007000700700700070070070007007007000700700700 +070070070007007007000700700700070070070007007007000700700700070070070007 +007007007FE3FE3FF02420809F26>I<7038F87CFC7EFC7E743A04020402040208040804 +10081008201040200F0E7E9F17>34 D<70F8FCFC74040404080810102040060E7C9F0D> +39 D<0020004000800100020006000C000C001800180030003000300070006000600060 +00E000E000E000E000E000E000E000E000E000E000E000E0006000600060007000300030 +003000180018000C000C000600020001000080004000200B2E7DA112>I<800040002000 +100008000C00060006000300030001800180018001C000C000C000C000E000E000E000E0 +00E000E000E000E000E000E000E000E000C000C000C001C0018001800180030003000600 +06000C00080010002000400080000B2E7DA112>I<000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000FFFFFFF0FFFFFFF000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +00000600001C207D9A23>43 D<70F8FCFC74040404080810102040060E7C840D>I<FFC0 +FFC00A027F8A0F>I<70F8F8F87005057C840D>I<000100030003000600060006000C000C +000C00180018001800300030003000600060006000C000C000C001800180018003000300 +03000600060006000C000C000C00180018001800300030003000600060006000C000C000 +C000102D7DA117>I<03F0000E1C001C0E00180600380700700380700380700380700380 +F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0 +F003C07003807003807003807807803807001806001C0E000E1C0003F000121F7E9D17> +I<018003800F80F380038003800380038003800380038003800380038003800380038003 +80038003800380038003800380038003800380038007C0FFFE0F1E7C9D17>I<03F0000C +1C00100E00200700400780800780F007C0F803C0F803C0F803C02007C00007C000078000 +0780000F00000E00001C0000380000700000600000C0000180000300000600400C004018 +00401000803FFF807FFF80FFFF80121E7E9D17>I<03F0000C1C00100E00200F00780F80 +780780780780380F80000F80000F00000F00000E00001C0000380003F000003C00000E00 +000F000007800007800007C02007C0F807C0F807C0F807C0F00780400780400F00200E00 +1C3C0003F000121F7E9D17>I<000600000600000E00000E00001E00002E00002E00004E +00008E00008E00010E00020E00020E00040E00080E00080E00100E00200E00200E00400E +00C00E00FFFFF0000E00000E00000E00000E00000E00000E00000E0000FFE0141E7F9D17 +>I<1803001FFE001FFC001FF8001FE00010000010000010000010000010000010000011 +F000161C00180E001007001007800003800003800003C00003C00003C07003C0F003C0F0 +03C0E00380400380400700200600100E000C380003E000121F7E9D17>I<007C00018200 +0701000E03800C07801C0780380300380000780000700000700000F1F000F21C00F40600 +F80700F80380F80380F003C0F003C0F003C0F003C0F003C07003C07003C0700380380380 +3807001807000C0E00061C0001F000121F7E9D17>I<4000007FFFC07FFF807FFF804001 +0080020080020080040000080000080000100000200000200000400000400000C00000C0 +0001C0000180000380000380000380000380000780000780000780000780000780000780 +00078000030000121F7D9D17>I<03F0000C0C0010060030030020018060018060018060 +01807001807803003E03003F06001FC8000FF00003F80007FC000C7E00103F00300F8060 +03804001C0C001C0C000C0C000C0C000C0C000806001802001001002000C0C0003F00012 +1F7E9D17>I<03F0000E18001C0C00380600380700700700700380F00380F00380F003C0 +F003C0F003C0F003C0F003C07007C07007C03807C0180BC00E13C003E3C0000380000380 +000380000700300700780600780E00700C002018001070000FC000121F7E9D17>I<70F8 +F8F8700000000000000000000070F8F8F87005147C930D>I<70F8F8F870000000000000 +0000000070F0F8F878080808101010202040051D7C930D>I<7FFFFFE0FFFFFFF0000000 +0000000000000000000000000000000000000000000000000000000000FFFFFFF07FFFFF +E01C0C7D9023>61 D<000100000003800000038000000380000007C0000007C0000007C0 +000009E0000009E0000009E0000010F0000010F0000010F0000020780000207800002078 +0000403C0000403C0000403C0000801E0000801E0000FFFE0001000F0001000F0001000F +00020007800200078002000780040003C00E0003C01F0007E0FFC03FFE1F207F9F22>65 +D<FFFFE0000F80380007801E0007801F0007800F0007800F8007800F8007800F8007800F +8007800F8007800F0007801F0007801E0007803C0007FFF00007803C0007801E0007800F +0007800F8007800780078007C0078007C0078007C0078007C0078007C00780078007800F +8007800F0007801F000F803C00FFFFF0001A1F7E9E20>I<000FC040007030C001C009C0 +038005C0070003C00E0001C01E0000C01C0000C03C0000C07C0000407C00004078000040 +F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000 +780000007C0000407C0000403C0000401C0000401E0000800E0000800700010003800200 +01C0040000703800000FC0001A217D9F21>I<FFFFE0000F803C0007801E000780070007 +800380078003C0078001E0078001E0078001F0078000F0078000F0078000F8078000F807 +8000F8078000F8078000F8078000F8078000F8078000F8078000F8078000F0078000F007 +8000F0078001E0078001E0078003C0078003800780070007800E000F803C00FFFFE0001D +1F7E9E23>I<FFFFFF000F800F0007800300078003000780010007800180078000800780 +008007800080078080800780800007808000078080000781800007FF8000078180000780 +800007808000078080000780800007800020078000200780002007800040078000400780 +0040078000C0078000C0078001800F800F80FFFFFF801B1F7E9E1F>I<FFFFFF000F800F +000780030007800300078001000780018007800080078000800780008007800080078080 +000780800007808000078080000781800007FF8000078180000780800007808000078080 +000780800007800000078000000780000007800000078000000780000007800000078000 +000FC00000FFFE0000191F7E9E1E>I<000FE0200078186000E004E0038002E0070001E0 +0F0000E01E0000601E0000603C0000603C0000207C00002078000020F8000000F8000000 +F8000000F8000000F8000000F8000000F8000000F8007FFCF80003E0780001E07C0001E0 +3C0001E03C0001E01E0001E01E0001E00F0001E0070001E0038002E000E0046000781820 +000FE0001E217D9F24>I<FFF8FFF80F800F8007800F0007800F0007800F0007800F0007 +800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007FFFF0007 +800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007 +800F0007800F0007800F0007800F0007800F000F800F80FFF8FFF81D1F7E9E22>I<FFFC +0FC007800780078007800780078007800780078007800780078007800780078007800780 +07800780078007800780078007800780078007800FC0FFFC0E1F7F9E10>I<FFFC0FFC0F +C003E0078001800780010007800200078004000780080007801000078020000780400007 +808000078100000783000007878000078F80000793C0000791E00007A1E00007C0F00007 +80F0000780780007803C0007803C0007801E0007801E0007800F00078007800780078007 +8007C00FC007E0FFFC3FFC1E1F7E9E23>75 D<FFFE000FC0000780000780000780000780 +000780000780000780000780000780000780000780000780000780000780000780000780 +0007800007800007800207800207800207800207800607800407800407800C07801C0F80 +7CFFFFFC171F7E9E1C>I<FF80001FF80F80001F800780001F0005C0002F0005C0002F00 +05C0002F0004E0004F0004E0004F000470008F000470008F000470008F000438010F0004 +38010F000438010F00041C020F00041C020F00041C020F00040E040F00040E040F00040E +040F000407080F000407080F000407080F000403900F000403900F000401E00F000401E0 +0F000401E00F000E00C00F001F00C01F80FFE0C1FFF8251F7E9E2A>I<FF803FF807C007 +C007C0038005E0010005E0010004F001000478010004780100043C0100043C0100041E01 +00040F0100040F010004078100040781000403C1000401E1000401E1000400F1000400F1 +000400790004003D0004003D0004001F0004001F0004000F0004000700040007000E0003 +001F000300FFE001001D1F7E9E22>I<001F800000F0F00001C0380007801E000F000F00 +0E0007001E0007803C0003C03C0003C07C0003E0780001E0780001E0F80001F0F80001F0 +F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0780001E07C0003E0 +7C0003E03C0003C03C0003C01E0007800E0007000F000F0007801E0001C0380000F0F000 +001F80001C217D9F23>I<FFFFE0000F80780007801C0007801E0007800F0007800F8007 +800F8007800F8007800F8007800F8007800F8007800F0007801E0007801C000780780007 +FFE000078000000780000007800000078000000780000007800000078000000780000007 +800000078000000780000007800000078000000FC00000FFFC0000191F7E9E1F>I<001F +800000F0F00001C0380007801E000F000F000E0007001E0007803C0003C03C0003C07C00 +03E07C0003E0780001E0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0F800 +01F0F80001F0F80001F0780001E0780001E07C0003E03C0003C03C0F03C01E1087800E20 +C7000F20CF0007A0FE0001E0F80000F0F010001FF0100000701000007830000038700000 +3FF000003FE000001FE000000FC0000007801C297D9F23>I<FFFF80000F80F000078078 +0007803C0007801E0007801E0007801F0007801F0007801F0007801F0007801E0007801E +0007803C00078078000780F00007FF80000781C0000780E0000780F00007807000078078 +00078078000780780007807C0007807C0007807C0007807C0407807E0407803E040FC01E +08FFFC0F10000003E01E207E9E21>I<07E0800C1980100780300380600180600180E001 +80E00080E00080E00080F00000F000007800007F00003FF0001FFC000FFE0003FF00001F +800007800003C00003C00001C08001C08001C08001C08001C0C00180C00380E00300F006 +00CE0C0081F80012217D9F19>I<7FFFFFE0780F01E0600F0060400F0020400F0020C00F +0030800F0010800F0010800F0010800F0010000F0000000F0000000F0000000F0000000F +0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F +0000000F0000000F0000000F0000000F0000000F0000001F800007FFFE001C1F7E9E21> +I<FFFC3FF80FC007C0078003800780010007800100078001000780010007800100078001 +000780010007800100078001000780010007800100078001000780010007800100078001 +00078001000780010007800100078001000780010007800100038002000380020001C002 +0001C0040000E008000070180000382000000FC0001D207E9E22>I<FFF003FE1F8000F8 +0F0000600F800060078000400780004003C0008003C0008003C0008001E0010001E00100 +01F0010000F0020000F0020000F806000078040000780400003C0800003C0800003C0800 +001E1000001E1000001F3000000F2000000F20000007C0000007C0000007C00000038000 +0003800000038000000100001F207F9E22>I<FFF07FF81FF01F800FC007C00F00078003 +800F00078001000F0007C00100078007C00200078007C00200078007C0020003C009E004 +0003C009E0040003C009E0040003E010F00C0001E010F0080001E010F0080001F0207808 +0000F02078100000F02078100000F0403C10000078403C20000078403C20000078C03E20 +00003C801E4000003C801E4000003C801E4000001F000F8000001F000F8000001F000F80 +00001E00078000000E00070000000E00070000000C000300000004000200002C207F9E2F +>I<7FF83FF80FE00FC007C0070003C0020001E0040001F00C0000F0080000781000007C +1000003C2000003E4000001E4000000F8000000F8000000780000003C0000007E0000005 +E0000009F0000018F8000010780000207C0000603C0000401E0000801F0001800F000100 +0780020007C0070003C01F8007E0FFE01FFE1F1F7F9E22>I<7FFFF87C00F87000F06001 +E04001E0C003C0C003C0800780800F80800F00001E00001E00003C00003C0000780000F8 +0000F00001E00001E00003C00403C0040780040F80040F000C1E000C1E00083C00183C00 +18780038F801F8FFFFF8161F7D9E1C>90 D<FEFEC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 +C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FEFE072D7CA10D>I<0804 +10082010201040204020804080408040B85CFC7EFC7E7C3E381C0F0E7B9F17>I<FEFE06 +060606060606060606060606060606060606060606060606060606060606060606060606 +06060606FEFE072D7FA10D>I<081020204040808080B8FCFC7C38060E7D9F0D>96 +D<1FE000303000781800781C00300E00000E00000E00000E0000FE00078E001E0E00380E +00780E00F00E10F00E10F00E10F01E10781E103867200F83C014147E9317>I<0E0000FE +00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E3E000E +C3800F01C00F00E00E00E00E00700E00700E00780E00780E00780E00780E00780E00780E +00700E00700E00E00F00E00D01C00CC300083E0015207F9F19>I<03F80E0C1C1E381E38 +0C70007000F000F000F000F000F000F00070007000380138011C020E0C03F010147E9314 +>I<000380003F8000038000038000038000038000038000038000038000038000038000 +038003E380061B801C0780380380380380700380700380F00380F00380F00380F00380F0 +0380F003807003807003803803803807801C07800E1B8003E3F815207E9F19>I<03F000 +0E1C001C0E00380700380700700700700380F00380F00380FFFF80F00000F00000F00000 +7000007000003800801800800C010007060001F80011147F9314>I<007C00C6018F038F +07060700070007000700070007000700FFF0070007000700070007000700070007000700 +0700070007000700070007000700070007007FF01020809F0E>I<0000E003E3300E3C30 +1C1C30380E00780F00780F00780F00780F00780F00380E001C1C001E380033E000200000 +2000003000003000003FFE001FFF800FFFC03001E0600070C00030C00030C00030C00030 +6000603000C01C038003FC00141F7F9417>I<0E0000FE00000E00000E00000E00000E00 +000E00000E00000E00000E00000E00000E00000E3E000E43000E81800F01C00F01C00E01 +C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01 +C00E01C0FFE7FC16207F9F19>I<1C003E003E003E001C00000000000000000000000000 +0E007E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00 +0E00FFC00A1F809E0C>I<00E001F001F001F000E0000000000000000000000000007007 +F000F0007000700070007000700070007000700070007000700070007000700070007000 +7000700070007000706070F060F0C061803F000C28829E0E>I<0E0000FE00000E00000E +00000E00000E00000E00000E00000E00000E00000E00000E00000E0FF00E03C00E03000E +02000E04000E08000E10000E30000E70000EF8000F38000E1C000E1E000E0E000E07000E +07800E03800E03C00E03E0FFCFF815207F9F18>I<0E00FE000E000E000E000E000E000E +000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E +000E000E000E000E000E00FFE00B20809F0C>I<0E1F01F000FE618618000E81C81C000F +00F00E000F00F00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00 +E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E0 +0E000E00E00E00FFE7FE7FE023147F9326>I<0E3E00FE43000E81800F01C00F01C00E01 +C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01 +C00E01C0FFE7FC16147F9319>I<01F800070E001C03803801C03801C07000E07000E0F0 +00F0F000F0F000F0F000F0F000F0F000F07000E07000E03801C03801C01C0380070E0001 +F80014147F9317>I<0E3E00FEC3800F01C00F00E00E00E00E00F00E00700E00780E0078 +0E00780E00780E00780E00780E00700E00F00E00E00F01E00F01C00EC3000E3E000E0000 +0E00000E00000E00000E00000E00000E00000E0000FFE000151D7F9319>I<03E0800619 +801C05803C0780380380780380700380F00380F00380F00380F00380F00380F003807003 +807803803803803807801C0B800E138003E3800003800003800003800003800003800003 +80000380000380003FF8151D7E9318>I<0E78FE8C0F1E0F1E0F0C0E000E000E000E000E +000E000E000E000E000E000E000E000E000E00FFE00F147F9312>I<1F9030704030C010 +C010C010E00078007F803FE00FF00070803880188018C018C018E030D0608F800D147E93 +12>I<020002000200060006000E000E003E00FFF80E000E000E000E000E000E000E000E +000E000E000E000E080E080E080E080E080610031001E00D1C7F9B12>I<0E01C0FE1FC0 +0E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0 +0E01C00E01C00E03C00603C0030DC001F1FC16147F9319>I<FF83F81E01E01C00C00E00 +800E00800E008007010007010003820003820003820001C40001C40001EC0000E80000E8 +0000700000700000700000200015147F9318>I<FF9FE1FC3C0780701C0300601C038020 +0E0380400E0380400E03C0400707C0800704C0800704E080038861000388710003C87300 +01D0320001D03A0000F03C0000E01C0000E01C0000601800004008001E147F9321>I<7F +C3FC0F01E00701C007018003810001C20000E40000EC00007800003800003C00007C0000 +4E000087000107000303800201C00601E01E01E0FF07FE1714809318>I<FF83F81E01E0 +1C00C00E00800E00800E008007010007010003820003820003820001C40001C40001EC00 +00E80000E800007000007000007000002000002000004000004000004000F08000F08000 +F100006200003C0000151D7F9318>I<3FFF380E200E201C40384078407000E001E001C0 +0380078007010E011E011C0338027006700EFFFE10147F9314>I<FFFFFFFFFFF02C0180 +8C2D>124 D E /Fu 7 120 df<FFFFFFFFFFFFF0FFFFFFFFFFFFF0FFFFFFFFFFFFF0FFFF +FFFFFFFFF0007FF00001FFF0007FF000003FF8007FF000000FF8007FF0000007F8007FF0 +000003F8007FF0000001F8007FF0000000F8007FF0000000F8007FF000000078007FF000 +000078007FF000000078007FF000000078007FF00078007C007FF00078003C007FF00078 +003C007FF00078003C007FF00078003C007FF000780000007FF000F80000007FF000F800 +00007FF001F80000007FF007F80000007FFFFFF80000007FFFFFF80000007FFFFFF80000 +007FFFFFF80000007FF007F80000007FF001F80000007FF000F80000007FF000F8000000 +7FF000780000007FF00078000F007FF00078000F007FF00078000F007FF00078001E007F +F00078001E007FF00000001E007FF00000001E007FF00000003E007FF00000003E007FF0 +0000003C007FF00000003C007FF00000007C007FF00000007C007FF0000000FC007FF000 +0001FC007FF0000003F8007FF0000007F8007FF000000FF8007FF000003FF8007FF00003 +FFF8FFFFFFFFFFFFF8FFFFFFFFFFFFF0FFFFFFFFFFFFF0FFFFFFFFFFFFF0383B7CBA40> +69 D<3FFFFFFFFFFFFFC03FFFFFFFFFFFFFC03FFFFFFFFFFFFFC03FFFFFFFFFFFFFC03F +F8007FF001FFC07FC0007FF0003FE07F80007FF0001FE07F00007FF0000FE07E00007FF0 +0007E07C00007FF00003E07C00007FF00003E07C00007FF00003E07800007FF00001E078 +00007FF00001E07800007FF00001E07800007FF00001E0F000007FF00000F0F000007FF0 +0000F0F000007FF00000F0F000007FF00000F0F000007FF00000F00000007FF000000000 +00007FF00000000000007FF00000000000007FF00000000000007FF00000000000007FF0 +0000000000007FF00000000000007FF00000000000007FF00000000000007FF000000000 +00007FF00000000000007FF00000000000007FF00000000000007FF00000000000007FF0 +0000000000007FF00000000000007FF00000000000007FF00000000000007FF000000000 +00007FF00000000000007FF00000000000007FF00000000000007FF00000000000007FF0 +0000000000007FF00000000000007FF00000000000007FF00000000000007FF000000000 +00007FF00000000000007FF00000000000007FF00000000000007FF00000000000007FF0 +000000000FFFFFFFFF8000000FFFFFFFFF8000000FFFFFFFFF8000000FFFFFFFFF80003C +3A7DB943>84 D<7FFFFFF801FFFFFC007FFFFFF801FFFFFC007FFFFFF801FFFFFC007FFF +FFF801FFFFFC00003FFC000007F80000003FFE000003E00000001FFF000007C00000000F +FF000007C000000007FF80000F8000000007FFC0001F0000000003FFC0003E0000000001 +FFE0003E0000000001FFF0007C0000000000FFF800F800000000007FF800F80000000000 +3FFC01F000000000003FFE03E000000000001FFE07C000000000000FFF07C00000000000 +0FFF8F80000000000007FFDF00000000000003FFFE00000000000003FFFE000000000000 +01FFFC00000000000000FFF8000000000000007FF8000000000000007FFC000000000000 +003FFE000000000000001FFE000000000000001FFF000000000000000FFF800000000000 +001FFF800000000000003FFFC00000000000003FFFE00000000000007DFFE00000000000 +00F8FFF0000000000001F0FFF8000000000001F07FFC000000000003E03FFC0000000000 +07C03FFE00000000000F801FFF00000000000F800FFF00000000001F0007FF8000000000 +3E0007FFC0000000007C0003FFE0000000007C0001FFE000000000F80001FFF000000001 +F00000FFF800000001E000007FF800000003E000003FFC00000007C000003FFE0000000F +8000001FFE0000000F8000000FFF0000001F0000000FFF8000007F80000007FFC000FFFF +FE0003FFFFFFC0FFFFFE0003FFFFFFC0FFFFFE0003FFFFFFC0FFFFFE0003FFFFFFC0423B +7DBA49>88 D<003FFE00000001FFFFE0000007FFFFF800000FE007FC00000FF001FE0000 +1FF800FF00001FF8007F80001FF8007FC0001FF8003FC0000FF0003FE00007E0003FE000 +03C0003FE0000000003FE0000000003FE0000000003FE0000000003FE0000000FFFFE000 +001FFFFFE000007FF83FE00003FF803FE00007FC003FE0000FF0003FE0001FE0003FE000 +3FE0003FE0007FC0003FE0007FC0003FE000FF80003FE000FF80003FE000FF80003FE000 +FF80003FE000FF80007FE0007FC0007FE0007FC000DFE0003FE0039FF0001FF80F0FFFE0 +07FFFE0FFFE001FFF807FFE0003FE000FFE02B267DA52F>97 D<000000003F800000003F +FF800000003FFF800000003FFF800000003FFF8000000001FF8000000000FF8000000000 +FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000 +FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000 +FF8000000000FF8000000000FF800000FF80FF80000FFFF0FF80003FFFFCFF8000FFC03F +FF8001FE000FFF8003FC0003FF8007F80001FF800FF00000FF801FF00000FF803FE00000 +FF803FE00000FF807FE00000FF807FC00000FF807FC00000FF807FC00000FF80FFC00000 +FF80FFC00000FF80FFC00000FF80FFC00000FF80FFC00000FF80FFC00000FF80FFC00000 +FF80FFC00000FF80FFC00000FF807FC00000FF807FC00000FF807FC00000FF803FE00000 +FF803FE00000FF801FE00000FF800FF00001FF8007F00003FF8003F80007FF8001FE001F +FFC000FF807EFFFE007FFFF8FFFE000FFFE0FFFE0001FF00FFFE2F3C7DBB36>100 +D<01FC03F000FFFC0FFC00FFFC1FFF00FFFC3C3F80FFFC707F8007FCE0FFC003FCC0FFC0 +03FD80FFC003FD80FFC003FF807F8003FF003F0003FF001E0003FF00000003FE00000003 +FE00000003FE00000003FE00000003FE00000003FE00000003FE00000003FE00000003FE +00000003FE00000003FE00000003FE00000003FE00000003FE00000003FE00000003FE00 +000003FE00000003FE00000003FE00000003FE00000003FE000000FFFFFC0000FFFFFC00 +00FFFFFC0000FFFFFC000022267DA528>114 D<FFFFE0FFFFC03FFF80FFFFE0FFFFC03F +FF80FFFFE0FFFFC03FFF80FFFFE0FFFFC03FFF8007FE0007F80001F00003FE0007F80001 +E00003FE0003FC0001E00003FF0003FC0003E00001FF0003FC0003C00001FF8003FE0007 +C00000FF8007FE0007800000FF8007FF0007800000FFC007FF000F8000007FC00FFF000F +0000007FE00F7F801F0000003FE01F7F801E0000003FE01E3FC01E0000003FF01E3FC03E +0000001FF03E3FC03C0000001FF03C1FE07C0000000FF87C1FE0780000000FF8780FF078 +0000000FFC780FF0F800000007FCF80FF0F000000007FCF007F9F000000003FFF007F9E0 +00000003FFE003FDE000000003FFE003FFE000000001FFE003FFC000000001FFC001FFC0 +00000000FFC001FF8000000000FF8000FF8000000000FF8000FF80000000007F8000FF00 +000000007F00007F00000000003F00007E00000000003E00003E00000000001E00003C00 +000041267EA546>119 D E end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 300dpi +TeXDict begin + +%%EndSetup +%%Page: 1 1 +1 0 bop 0 668 a Fu(T)51 687 y(E)103 668 y(Xdra)m(w)p +0 720 1950 17 v 1335 769 a Ft(P)o(ostScript)15 b(Dra)o(wings)g(from)f +(T)1890 778 y(E)1916 769 y(X)1730 823 y(Edition)i(2.0)1647 +877 y(Decem)o(b)q(er)g(1995)0 2521 y Fs(P)n(eter)22 b(Kabal)p +0 2545 1950 9 v eop +%%Page: 2 2 +2 1 bop 0 1080 a Ft(Cop)o(yrigh)o(t)226 1079 y(c)214 +1080 y Fr(\015)15 b Ft(1993-95)f(P)o(eter)g(Kabal)0 1341 +y(This)g(is)g(edition)g(2.0)f(of)g(the)g(do)q(cumen)o(tation)h(for)f +(the)g(T)971 1351 y(E)997 1341 y(Xdra)o(w)f(macros)h(for)g(the)g(T)1463 +1351 y(E)1489 1341 y(X)g(t)o(yp)q(esetting)g(program.)0 +1603 y(P)o(eter)i(Kabal)0 1665 y(Departmen)o(t)f(of)h(Electrical)i +(Engineering)0 1727 y(McGill)g(Univ)o(ersit)o(y)0 1789 +y(3480)d(Univ)o(ersit)o(y)0 1852 y(Mon)o(treal,)g(Queb)q(ec)0 +1914 y(Canada)30 b(H3A)7 b(2A7)0 2051 y Fq(kabal@TSP.EE.McGill.CA)0 +2312 y Ft(P)o(ermission)13 b(is)g(gran)o(ted)f(to)f(mak)o(e)h(and)h +(distribute)h(v)o(erbatim)e(copies)h(of)f(this)h(man)o(ual)g(pro)o +(vided)g(the)f(cop)o(yrigh)o(t)0 2375 y(notice)k(and)f(this)h(p)q +(ermission)h(notice)e(are)g(preserv)o(ed)h(on)f(all)h(copies.)0 +2512 y(P)o(ermission)f(is)f(gran)o(ted)f(to)h(cop)o(y)g(and)g +(distribute)h(mo)q(di\014ed)h(v)o(ersions)e(of)f(this)i(man)o(ual)f +(under)h(the)f(conditions)0 2574 y(for)e(v)o(erbatim)g(cop)o(ying,)h +(pro)o(vided)h(that)d(the)i(en)o(tire)g(resulting)h(deriv)o(ed)f(w)o +(ork)f(is)h(distributed)h(under)f(the)g(terms)0 2636 +y(of)i(a)g(p)q(ermission)h(notice)g(iden)o(tical)h(to)e(this)g(one.)p +eop +%%Page: 1 3 +1 2 bop 0 -83 a Ft(Chapter)15 b(1:)k(In)o(tro)q(duction)1447 +b(1)0 158 y Fp(1)41 b(In)n(tro)r(duction)62 345 y Ft(T)87 +355 y(E)113 345 y(X)22 b(is)h(a)e(p)q(o)o(w)o(erful)i(t)o(yp)q +(esetting)f(program)f(whic)o(h)i(allo)o(ws)f(for)g(complex)h(text)e(la) +o(y)o(outs)h(but)g(b)o(y)g(itself)0 407 y(lac)o(ks)f(a)g(general)g +(graphics)g(capabilit)o(y)l(.)39 b(Ho)o(w)o(ev)o(er,)21 +b(when)g(coupled)h(with)g(an)f(appropriate)f(prin)o(ter)i(driv)o(er)0 +470 y(program,)15 b(external)j(graphics)f(\014les)g(can)g(b)q(e)g +(inserted)h(in)o(to)e(the)h(prin)o(ted)h(do)q(cumen)o(t.)24 +b(In)17 b(this)g(mo)q(de,)g(T)1843 479 y(E)1869 470 y(X)f(is)0 +532 y(instructed)d(to)f(lea)o(v)o(e)h(space)g(for)f(a)g(dra)o(wing.)19 +b(The)13 b(dra)o(wing)f(is)h(inserted)h(b)o(y)e(the)h(prin)o(ter)g +(driv)o(er)g(program.)18 b(The)0 594 y(T)25 604 y(E)51 +594 y(Xdra)o(w)d(macros)f(describ)q(ed)k(here)e(generate)g(the)f +(external)h(graphics)h(\014le)f(from)f(within)i(T)1619 +604 y(E)1645 594 y(X)e(and)h(generate)0 656 y(the)d(instructions)g(to)f +(the)h(the)g(prin)o(t)g(driv)o(er)g(program)e(to)h(p)q(osition)i(the)e +(graphics)i(at)e(the)g(appropriate)h(p)q(osition)0 719 +y(on)i(the)g(page.)62 856 y(T)87 866 y(E)113 856 y(Xdra)o(w)10 +b(consists)g(of)g(a)g(set)h(of)e(T)635 866 y(E)661 856 +y(X)h(macros)g(that)g(create)g(line)i(dra)o(wings)e(and)h(other)f +(\014gures.)18 b(The)11 b(dra)o(wing)0 918 y(primitiv)o(es)17 +b(include)i(solid)e(lines,)h(patterned)e(lines,)i(Bezier)f(curv)o(es,)f +(circles)i(and)e(arro)o(ws.)22 b(Other)16 b(commands)0 +980 y(allo)o(w)e(for)e(the)i(\014lling)h(of)e(a)g(region)g(with)h(a)f +(gra)o(y)f(lev)o(el.)21 b(The)13 b(dra)o(wing)h(commands)f(generate)g +(P)o(ostScript)g(co)q(de.)0 1043 y(This)j(limits)h(T)256 +1052 y(E)281 1043 y(Xdra)o(w)e(to)g(systems)g(whic)o(h)h(use)g(P)o +(ostScript)f(prin)o(ters.)21 b(T)1296 1052 y(E)1322 1043 +y(Xdra)o(w)15 b(also)g(pro)o(vides)h(commands)0 1105 +y(to)i(p)q(osition)h(T)260 1115 y(E)286 1105 y(X)f(text,)g(including)j +(mathematics,)e(on)f(the)h(dra)o(wing.)29 b(The)18 b(\014nal)i(dra)o +(wing,)e(with)h(text)f(and)0 1167 y(graphics,)d(can)h(b)q(e)g(p)q +(ositioned)g(on)f(the)h(page)f(lik)o(e)h(an)o(y)f(other)g(T)1117 +1177 y(E)1142 1167 y(X)g(b)q(o)o(x.)62 1304 y(The)i(basic)h(T)298 +1314 y(E)323 1304 y(Xdra)o(w)e(macros)g(for)g(T)723 1314 +y(E)749 1304 y(X)g(use)h(the)g Fq(\\special)f Ft(syn)o(tax)f +(recognized)j(b)o(y)f(the)g(prin)o(ter)g(driv)o(er)0 +1366 y(program)d Fq(dvips)p Ft(.)20 b(Ho)o(w)o(ev)o(er,)14 +b(when)i(in)o(v)o(ok)o(ed)f(as)g(a)g(LaT)985 1376 y(E)1011 +1366 y(X2e)g(pac)o(k)m(age,)g(the)h(T)1389 1376 y(E)1414 +1366 y(Xdra)o(w)f(macros)g(can)g(b)q(e)h(used)0 1429 +y(with)h(an)o(y)g(of)f(the)h(P)o(ostScript)g(prin)o(ter)g(driv)o(er)g +(programs)f(supp)q(orted)h(b)o(y)g(the)g(standard)f Fq(graphics)g +Ft(pac)o(k)m(age)0 1491 y(for)f(LaT)146 1501 y(E)171 +1491 y(X2e.)62 1628 y(The)c(basic)g(T)285 1638 y(E)311 +1628 y(Xdra)o(w)f(macros)f(pro)o(vide)i(only)g(simple)h(dra)o(wing)f +(commands.)18 b(Ho)o(w)o(ev)o(er,)10 b(T)1618 1638 y(E)1644 +1628 y(Xdra)o(w)f(pro)o(vides)0 1690 y(a)k(dra)o(wing)h(segmen)o(t)f +(en)o(vironmen)o(t)h(whic)o(h)g(allo)o(ws)g(parameter)f(c)o(hanges)h +(and)f(co)q(ordinate)h(scaling)h(c)o(hanges)f(to)0 1752 +y(b)q(e)i(k)o(ept)g(lo)q(cal)h(to)e(the)h(dra)o(wing)f(segmen)o(t.)22 +b(This)16 b(facilit)o(y)l(,)h(together)e(with)h(T)1349 +1762 y(E)1374 1752 y(X's)g(macro)f(capabilities)j(allo)o(ws)0 +1815 y(one)e(to)e(mo)q(dularize)j(dra)o(wing)f(units)g(and)f(extend)h +(T)922 1824 y(E)948 1815 y(Xdra)o(w)f(b)o(y)g(building)j(more)d +(complex)h(graphics)g(en)o(tities)0 1877 y(from)e(simpler)j(elemen)o +(ts.)0 2101 y Fs(1.1)33 b(Distribution)17 b(information)62 +2238 y Ft(The)e(T)180 2248 y(E)205 2238 y(Xdra)o(w)f(routines)h(are)f +(pro)o(vided)h(free)f(of)g(c)o(harge)g(without)g(w)o(arran)o(t)o(y)f +(of)h(an)o(y)g(kind.)20 b(Note)14 b(that)g(the)0 2300 +y(T)25 2310 y(E)51 2300 y(Xdra)o(w)k(routines)h(are)g(cop)o(yrigh)o +(ted.)31 b(They)19 b(ma)o(y)f(b)q(e)i(distributed)g(freely)g(pro)o +(vided)f(that)g(the)f(recipien)o(ts)0 2363 y(also)d(acquire)i(the)e +(righ)o(t)h(to)f(distribute)h(them)g(freely)l(.)22 b(The)15 +b(notices)h(to)f(this)h(e\013ect)f(m)o(ust)g(b)q(e)i(preserv)o(ed)e +(when)0 2425 y(the)g(source)h(\014les)g(are)f(distributed.)p +eop +%%Page: 2 4 +2 3 bop 0 -83 a Ft(2)1745 b(T)1793 -73 y(E)1819 -83 y(Xdra)o(w)p +eop +%%Page: 3 5 +3 4 bop 0 -83 a Ft(Chapter)15 b(2:)k(Using)d(the)g(T)464 +-73 y(E)489 -83 y(Xdra)o(w)f(Commands)1068 b(3)0 158 +y Fp(2)41 b(Using)14 b(the)h(T)468 174 y(E)511 158 y(Xdra)n(w)g +(Commands)62 360 y Ft(The)k(main)f(T)300 369 y(E)326 +360 y(Xdra)o(w)f(macros)g(\(commands\))h(are)f(de\014ned)j(in)f(the)f +(\014le)h(`)p Fq(texdraw.tex)p Ft('.)26 b(These)19 b(macros)0 +422 y(ma)o(y)c(b)q(e)i(used)g(directly)h(in)f(T)513 432 +y(E)538 422 y(X.)f(The)h(\014le)g(`)p Fq(texdraw.sty)p +Ft(')d(pro)o(vides)i(an)h(in)o(terface)f(for)g(use)g(with)h(LaT)1835 +432 y(E)1860 422 y(X2e.)0 484 y(The)e(follo)o(wing)h(sections)g +(describ)q(e)h(the)e(basic)h(commands)f(for)g(T)1143 +494 y(E)1168 484 y(Xdra)o(w.)0 734 y Fs(2.1)33 b(Accessing)14 +b(T)455 748 y(E)490 734 y(Xdra)n(w)62 874 y Ft(The)19 +b(form)e(of)h(the)g(user)g(command)g(to)f(run)i(the)f(T)965 +884 y(E)990 874 y(X)g(program)f(dep)q(ends)j(on)e(whic)o(h)h(v)o +(ersion)f(of)g(T)1842 884 y(E)1867 874 y(X)g(is)0 937 +y(b)q(eing)f(used,)f(and)f(whic)o(h)i(other)e(macro)g(pac)o(k)m(ages)g +(are)g(preloaded)i(as)e(format)f(\014les.)22 b(T)o(ypically)l(,)17 +b(installations)0 999 y(ha)o(v)o(e)g(at)g(least)g(t)o(w)o(o)f(v)o +(ersions)i(of)f(T)615 1009 y(E)640 999 y(X)g(|)h(plain)h(T)895 +1009 y(E)921 999 y(X)e(whic)o(h)h(includes)i(basic)e(t)o(yp)q(esetting) +f(macros)g(\(usually)0 1061 y(in)o(v)o(ok)o(ed)h(as)f(`)p +Fq(tex)p Ft('\))e(and)j(LaT)524 1071 y(E)550 1061 y(X2e)f(whic)o(h)h +(includes)i(the)d(LaT)1109 1071 y(E)1135 1061 y(X2e)g(t)o(yp)q +(esetting)h(macros)e(\(usually)j(in)o(v)o(ok)o(ed)0 1123 +y(as)14 b(`)p Fq(latex)p Ft('\).)k(An)d(older)g(v)o(ersion)g(of)f(LaT) +718 1133 y(E)744 1123 y(X,)g(v)o(ersion)h(2.09,)e(ma)o(y)h(also)h(b)q +(e)g(a)o(v)m(ailable.)21 b(The)15 b(T)1639 1133 y(E)1665 +1123 y(Xdra)o(w)f(macros)0 1186 y(can)h(b)q(e)h(used)g(with)g(plain)g +(T)491 1195 y(E)517 1186 y(X)f(and)g(with)h(either)g(v)o(ersion)f(of)g +(LaT)1169 1195 y(E)1195 1186 y(X.)62 1325 y(F)l(or)e(use)g(with)h +(plain)g(T)456 1335 y(E)482 1325 y(X,)f(the)g(user)g(m)o(ust)g(read)g +(in)h(the)f(T)1074 1335 y(E)1100 1325 y(Xdra)o(w)f(macros)h(from)f(the) +h(\014le)i(`)p Fq(texdraw.tex)p Ft('.)120 1455 y Fq(\\input)23 +b(texdraw)285 b(\045)24 b(Read)f(in)h(the)g(TeXdraw)e(macros)144 +1507 y(...)120 1559 y(\\btexdraw)168 1611 y(...)500 b(\045)24 +b(TeXdraw)f(commands)g(to)g(generate)g(a)h(drawing)120 +1663 y(\\etexdraw)62 1792 y Ft(F)l(or)j(use)h(with)g(LaT)439 +1802 y(E)465 1792 y(X)g(v)o(ersion)f(2.09,)j(the)d(user)h(reads)g(in)g +(the)g(T)1330 1802 y(E)1355 1792 y(Xdra)o(w)f(macros)g(from)g(the)h +(\014le)0 1854 y(`)p Fq(texdraw.tex)p Ft(')13 b(and)i(optionally)i +(de\014nes)f(the)f Fq(\\begin{texdraw})e Ft(/)i Fq(\\end{texdraw})f +Ft(en)o(vironmen)o(t.)120 1984 y Fq(\\documentstyle[11pt]{artic)o(le}) +45 b(\045)23 b(Article)g(style)h(with)f(the)g(11pt)h(size)f(options)120 +2036 y(...)120 2088 y(\\input)g(texdraw)285 b(\045)24 +b(Read)f(in)h(the)g(TeXdraw)e(macros)120 2139 y +(\\newenvironment{texdraw}{\\)o(leavevm)o(ode\\btex)o(draw}{\\)o +(etexdra)o(w})144 2191 y(...)120 2243 y(\\begin{texdraw})168 +2295 y(...)500 b(\045)24 b(TeXdraw)f(commands)g(to)g(generate)g(a)h +(drawing)120 2347 y(\\end{texdraw})120 2399 y(...)120 +2451 y(\\end{document})62 2583 y Ft(F)l(or)c(use)h(with)h(LaT)419 +2593 y(E)444 2583 y(X2e,)g(the)f(user)g(m)o(ust)f(load)h(the)g +Fq(texdraw)e Ft(pac)o(k)m(age)i(\(\014le)g(`)p Fq(texdraw.sty)p +Ft('\).)34 b(This)0 2645 y(pac)o(k)m(age)18 b(\014le)g(de\014nes)h(the) +f Fq(\\begin{texdraw})d Ft(/)i Fq(\\end{texdraw})f Ft(en)o(vironmen)o +(t,)i(brings)g(in)h(the)e(standard)p eop +%%Page: 4 6 +4 5 bop 0 -83 a Ft(4)1745 b(T)1793 -73 y(E)1819 -83 y(Xdra)o(w)0 +158 y Fq(graphics)16 b Ft(pac)o(k)m(age)i(and)f(reads)h(in)g(the)f +(\014le)i(`)p Fq(texdraw.tex)p Ft(')c(con)o(taining)j(the)f +(de\014nitions)j(of)d(the)g(T)1793 168 y(E)1819 158 y(Xdra)o(w)0 +221 y(macros.)120 353 y Fq(\\documentclass[11pt]{artic)o(le})45 +b(\045)23 b(Article)g(class)h(with)f(the)g(11pt)h(size)f(option)120 +405 y(\\usepackage{texdraw})260 b(\045)23 b(TeXdraw)g(commands)120 +508 y(\\begin{document})144 560 y(...)120 612 y(\\begin{texdraw})168 +664 y(...)500 b(\045)24 b(TeXdraw)f(commands)g(to)g(generate)g(a)h +(drawing)120 716 y(\\end{texdraw})144 768 y(...)120 820 +y(\\end{document})62 952 y Ft(As)15 b(the)g(T)232 962 +y(E)257 952 y(Xdra)o(w)f(commands)g(are)h(pro)q(cessed)g(b)o(y)g(T)994 +962 y(E)1019 952 y(X,)f(an)h(in)o(termediate)g(P)o(ostScript)g(\014le)g +(is)g(generated.)0 1014 y(The)i(in)o(termediate)g(P)o(ostScript)f(has)h +(a)f(name)h(of)f(the)g(form)g(`)p Fo(name)p Fq(.ps1)p +Ft('.)23 b(The)17 b(name)f(part)g(is)h(deriv)o(ed)h(from)0 +1076 y(the)d(name)f(of)g(the)h(main)g(T)465 1086 y(E)491 +1076 y(X)f(\014le)i(b)q(eing)g(pro)q(cessed.)k(If)15 +b(more)f(than)g(one)h(dra)o(wing)f(is)i(pro)q(duced,)f(the)g(digit)g +(in)0 1139 y(the)g(\014le)i(name)e(extension)h(is)f(incremen)o(ted.)772 +1122 y Fn(1)62 1281 y Ft(The)f(T)179 1291 y(E)204 1281 +y(Xdra)o(w)f(commands)g(to)f(pro)q(duce)i(a)f(dra)o(wing)g(are)g +(inserted)h(b)q(et)o(w)o(een)g Fq(\\btexdraw)e Ft(and)h +Fq(\\etexdraw)0 1343 y Ft(commands,)g(or)g(for)g(LaT)434 +1353 y(E)460 1343 y(X,)g(b)q(et)o(w)o(een)h Fq(\\begin{texdraw})e +Ft(and)h Fq(\\end{texdraw})f Ft(commands.)19 b(This)c(results)0 +1406 y(in)20 b(a)e(T)123 1415 y(E)148 1406 y(X)h(b)q(o)o(x)g(of)f +(appropriate)h(size)g(con)o(taining)h(the)e(dra)o(wing)h(generated)g(b) +o(y)f(the)h(T)1552 1415 y(E)1577 1406 y(Xdra)o(w)g(commands.)0 +1468 y(The)c(T)118 1478 y(E)144 1468 y(Xdra)o(w)g(b)q(o)o(x)g(can)g(b)q +(e)h(p)q(ositioned)h(in)f(a)e(do)q(cumen)o(t)i(lik)o(e)g(an)o(y)f +(other)g(T)1355 1478 y(E)1381 1468 y(X)g(b)q(o)o(x.)62 +1610 y(The)j Fq(\\centertexdraw{...})c Ft(macro)i(cen)o(ters)h(the)g(b) +q(o)o(x)g(generated)g(b)o(y)g(T)1389 1620 y(E)1415 1610 +y(Xdra)o(w.)25 b(The)17 b(v)o(ertical)h(space)0 1673 +y(tak)o(en)i(up)h(is)g(equal)h(to)e(the)g(v)o(ertical)h(size)h(of)e +(the)h(dra)o(wing.)36 b(The)21 b Fq(\\centertexdraw)d +Ft(macro)i(is)h(normally)0 1735 y(used)d(in)g(v)o(ertical)f(mo)q(de)h +(\(b)q(et)o(w)o(een)f(paragraphs\).)24 b(A)17 b Fq(\\par)g +Ft(command)g(\(a)f(blank)i(line)h(will)g(do)e(also\))g(b)q(efore)0 +1797 y(a)j Fq(\\centertexdraw)f Ft(command)h(will)j(terminate)d +(horizon)o(tal)h(mo)q(de)g(and)g(return)f(to)g(v)o(ertical)h(mo)q(de.) +37 b(F)l(or)0 1859 y(LaT)76 1869 y(E)102 1859 y(X,)15 +b(a)f(structured)i(equiv)m(alen)o(t)g(to)f(the)g Fq +(\\centertexdraw{...})e Ft(command)i(is)h(sho)o(wn)f(b)q(elo)o(w.)120 +1991 y Fq(\\begin{center})120 2043 y(\\begin{texdraw})168 +2095 y(...)120 2147 y(\\end{texdraw})120 2199 y(\\end{center})62 +2331 y Ft(The)i Fq(\\everytexdraw)d Ft(command)i(can)g(b)q(e)g(used)h +(to)e(de\014ne)j(a)d(set)h(of)g(T)1319 2341 y(E)1344 +2331 y(Xdra)o(w)f(commands)h(that)g(will)h(b)q(e)0 2393 +y(executed)e(at)e(the)h(b)q(eginning)i(of)d(ev)o(ery)h(T)719 +2403 y(E)744 2393 y(Xdra)o(w)f(dra)o(wing.)20 b(It)14 +b(is)g(in)o(v)o(ok)o(ed)g(as)f Fq(\\everytexdraw{)h(...})p +Ft(,)f(with)0 2456 y(the)i(desired)i(T)258 2465 y(E)283 +2456 y(Xdra)o(w)e(commands)g(as)g(argumen)o(ts.)p 0 2526 +600 2 v 21 2565 a Fn(1)62 2581 y Ft(After)21 b(the)h(nin)o(th)g(P)o +(ostScript)f(\014le,)i(the)f(name)f(of)g(the)g(in)o(termediate)h(P)o +(ostScript)f(\014le)i(tak)o(es)d(the)i(form)62 2644 y(`)p +Fo(name)p Fq(.p10)p Ft(',)14 b(with)h(the)h(n)o(um)o(b)q(er)f +(increasing)i(from)d(10)h(with)g(eac)o(h)h(\014le.)p +eop +%%Page: 5 7 +5 6 bop 0 -83 a Ft(Chapter)15 b(2:)k(Using)d(the)g(T)464 +-73 y(E)489 -83 y(Xdra)o(w)f(Commands)1068 b(5)0 158 +y Fq(\\btexdraw)240 221 y Ft(Start)14 b(a)h(T)419 230 +y(E)445 221 y(Xdra)o(w)f(dra)o(wing.)20 b(The)15 b(dra)o(wing)h(is)f +(terminated)h(with)f(an)g Fq(\\etexdraw)f Ft(command.)0 +305 y Fq(\\etexdraw)240 368 y Ft(End)h(a)f(T)398 377 +y(E)423 368 y(Xdra)o(w)g(dra)o(wing)h(started)e(with)i(a)f +Fq(\\btexdraw)f Ft(command.)20 b(The)15 b(resulting)g(T)1793 +377 y(E)1819 368 y(Xdra)o(w)240 430 y(dra)o(wing)i(is)h(placed)h(in)f +(a)f(b)q(o)o(x)g(with)h(heigh)o(t)f(equal)h(to)f(the)h(heigh)o(t)f(of)g +(the)h(dra)o(wing)f(and)g(width)240 492 y(equal)f(to)f(the)g(width)h +(of)e(the)i(dra)o(wing.)j(The)d(depth)g(of)e(the)i(b)q(o)o(x)f(is)h +(zero.)0 577 y Fq(\\begin{texdraw})240 639 y Ft(Start)h(a)h(T)425 +649 y(E)450 639 y(Xdra)o(w)f(dra)o(wing.)28 b(The)18 +b(dra)o(wing)g(is)h(terminated)f(with)g(an)g Fq(\\end{texdraw})e +Ft(com-)240 702 y(mand.)k(This)c(command)f(is)h(for)e(use)i(with)f(LaT) +1068 711 y(E)1094 702 y(X.)0 786 y Fq(\\end{texdraw})240 +849 y Ft(End)k(a)g(T)407 858 y(E)433 849 y(Xdra)o(w)f(dra)o(wing)h +(started)f(with)i(a)e Fq(\\begin{texdraw})f Ft(command.)32 +b(The)19 b(resulting)240 911 y(T)265 921 y(E)291 911 +y(Xdra)o(w)12 b(dra)o(wing)h(is)g(placed)i(in)f(a)e(b)q(o)o(x)h(with)h +(heigh)o(t)f(equal)h(to)e(the)i(heigh)o(t)f(of)g(the)g(dra)o(wing)g +(and)240 973 y(width)i(equal)f(to)g(the)g(width)h(of)e(the)h(dra)o +(wing.)20 b(The)14 b(depth)h(of)e(the)i(b)q(o)o(x)e(is)i(zero.)k(This)c +(command)240 1036 y(is)h(for)e(use)i(with)f(LaT)613 1045 +y(E)639 1036 y(X.)0 1120 y Fq(\\centertexdraw{)e(...)i(})240 +1183 y Ft(Cen)o(ter)e(a)g(T)447 1192 y(E)472 1183 y(Xdra)o(w)g(b)q(o)o +(x)g(horizon)o(tally)l(.)20 b(The)14 b(argumen)o(t)e(con)o(tains)i(T) +1460 1192 y(E)1485 1183 y(Xdra)o(w)f(commands.)19 b(The)240 +1245 y(resulting)j(b)q(o)o(x)g(has)f(the)g(horizon)o(tal)h(size)g +Fq(\\hsize)f Ft(and)g(heigh)o(t)h(equal)g(to)f(the)g(heigh)o(t)h(of)f +(the)240 1307 y(dra)o(wing.)0 1392 y Fq(\\everytexdraw{)13 +b(...)i(})240 1454 y Ft(Sp)q(ecify)d(T)418 1464 y(E)444 +1454 y(Xdra)o(w)d(commands)i(to)e(b)q(e)j(executed)f(at)f(the)g(b)q +(eginning)j(of)d(ev)o(ery)g(T)1612 1464 y(E)1638 1454 +y(Xdra)o(w)f(dra)o(wing.)0 1674 y Fs(2.2)33 b(Command)14 +b(syn)n(tax)62 1811 y Ft(Generally)g(T)291 1821 y(E)317 +1811 y(Xdra)o(w)f(commands)f(that)h(tak)o(e)f(a)h(single)i(argumen)o(t) +d(need)i(a)f(terminating)g(blank)h(or)f(newline)0 1873 +y(after)19 b(the)h(argumen)o(t.)32 b(Argumen)o(ts)19 +b(that)g(are)g(self-delimiti)q(ng,)k(suc)o(h)d(as)f(co)q(ordinates)h +(within)h(paren)o(theses)0 1935 y(and)14 b(text)f(within)i(braces,)f +(do)g(not)f(need)i(the)e(terminating)i(blank.)20 b(Ho)o(w)o(ev)o(er,)12 +b(ev)o(en)j(when)f(not)f(needed)i(b)o(y)f(the)0 1998 +y(de\014ning)21 b(syn)o(tax)d(of)h(the)g(command,)g(blanks)h(follo)o +(wing)g(command)f(argumen)o(ts)f(are)h(allo)o(w)o(ed)g(and)g(ignored)0 +2060 y(within)d(the)g(T)245 2070 y(E)270 2060 y(Xdra)o(w)f(en)o +(vironmen)o(t.)62 2197 y(On)j(en)o(tering)f(the)g(T)422 +2207 y(E)447 2197 y(Xdra)o(w)f(en)o(vironmen)o(t,)h(T)896 +2207 y(E)922 2197 y(X)f(is)i(in)f(in)o(ternal)h(v)o(ertical)f(mo)q(de)g +(\(v)o(ertical)g(mo)q(de)g(inside)0 2259 y(a)k Fq(\\vbox)p +Ft(\).)36 b(In)22 b(this)f(mo)q(de,)i(spaces)e(can)g(b)q(e)h(placed)g +(freely)g(b)q(et)o(w)o(een)f(commands.)37 b(Ho)o(w)o(ev)o(er,)22 +b(an)o(y)e(other)0 2321 y(extraneous)13 b(input)i(that)e(generates)h +(output)f(that)g(is)i(not)e(part)g(of)g(the)h(T)1260 +2331 y(E)1286 2321 y(Xdra)o(w)f(en)o(vironmen)o(t)h(is)g(disallo)o(w)o +(ed.)62 2458 y(Blank)i(lines)g(are)e(in)o(terpreted)i(as)e(paragraph)g +(breaks,)g(equiv)m(alen)o(t)i(to)e(a)h Fq(\\par)f Ft(command.)19 +b(The)c(T)1793 2468 y(E)1819 2458 y(Xdra)o(w)0 2521 y(macro)j +Fq(\\centertexdraw)f Ft(is)i(de\014ned)h(with)g(the)e +Fq(\\long)h Ft(attribute)f(to)g(allo)o(w)h Fq(\\par)g +Ft(commands)f(and)h(blank)0 2583 y(lines)e(to)f(b)q(e)g(in)o(tersp)q +(ersed)h(b)q(et)o(w)o(een)f(T)678 2593 y(E)704 2583 y(Xdra)o(w)f +(commands.)22 b(The)16 b Fq(\\btexdraw)f Ft(and)h Fq(\\etexdraw)e +Ft(commands)0 2645 y(also)h(allo)o(w)h Fq(\\par)e Ft(command)h(and)h +(blank)g(lines)g(to)f(b)q(e)h(included.)p eop +%%Page: 6 8 +6 7 bop 0 -83 a Ft(6)1745 b(T)1793 -73 y(E)1819 -83 y(Xdra)o(w)0 +158 y Fs(2.3)33 b(T)156 172 y(E)191 158 y(Xdra)n(w)15 +b(co)r(ordinates)62 297 y Ft(The)j(T)183 306 y(E)209 +297 y(Xdra)o(w)f(co)q(ordinate)h(system)g(has)f(increasing)i +Fo(x)i Ft(to)c(the)h(righ)o(t)g(and)g(increasing)h Fo(y)j +Ft(up)o(w)o(ard.)27 b(The)0 359 y(co)q(ordinates)14 b(\(without)g(the)g +(unit\))h(are)e(\015oating)h(p)q(oin)o(t)h(n)o(um)o(b)q(ers.)k(In)o +(teger)14 b(v)m(alues)h(can)g(b)q(e)f(written)g(without)g(a)0 +421 y(decimal)f(p)q(oin)o(t.)20 b(The)12 b(size)g(of)g(the)g(dra)o +(wing)g(is)g(determined)h(b)o(y)f(the)g(maxim)o(um)g(excursions)g(of)g +(the)g(co)q(ordinates)0 483 y(sp)q(eci\014ed)17 b(in)f(T)261 +493 y(E)287 483 y(Xdra)o(w)e(commands.)840 853 y @beginspecial +0 @hoffset 0 @voffset @setspecial +%%BeginDocument: texdraw.ps1 +50 dict begin +/mv {stroke moveto} def +/lv {lineto} def +/st {currentpoint stroke moveto} def +/sl {st setlinewidth} def +/sd {st 0 setdash} def +/sg {st setgray} def +/bs {gsave} def /es {stroke grestore} def +/fl {gsave setgray fill grestore + currentpoint newpath moveto} def +/fp {gsave setgray fill grestore st} def +/cv {curveto} def +/cr {gsave currentpoint newpath 3 -1 roll 0 360 arc + stroke grestore} def +/fc {gsave setgray currentpoint newpath + 3 -1 roll 0 360 arc fill grestore} def +/ar {gsave currentpoint newpath 5 2 roll arc stroke grestore} def +/el {gsave /svm matrix currentmatrix def + currentpoint translate scale newpath 0 0 1 0 360 arc + svm setmatrix stroke grestore} def +/fe {gsave setgray currentpoint translate scale newpath + 0 0 1 0 360 arc fill grestore} def +/av {/hhwid exch 2 div def /hlen exch def + /ah exch def /tipy exch def /tipx exch def + currentpoint /taily exch def /tailx exch def + /dx tipx tailx sub def /dy tipy taily sub def + /alen dx dx mul dy dy mul add sqrt def + /blen alen hlen sub def + gsave tailx taily translate dy dx atan rotate + (V) ah ne {blen 0 gt {blen 0 lineto} if} {alen 0 lineto} ifelse + stroke blen hhwid neg moveto alen 0 lineto blen hhwid lineto + (T) ah eq {closepath} if + (W) ah eq {gsave 1 setgray fill grestore closepath} if + (F) ah eq {fill} {stroke} ifelse + grestore tipx tipy moveto} def +0.24 0.24 scale +1 setlinecap 1 setlinejoin +3 setlinewidth [] 0 setdash +0 0 moveto +0 240 (T) 48 24 av +0 0 mv +240 0 (T) 48 24 av +stroke end showpage +%%EndDocument + @endspecial 828 574 a Fo(y)1110 863 y(x)62 991 y Ft(Consider)i(the)f +(follo)o(wing)h(example)g(of)f(T)777 1001 y(E)803 991 +y(Xdra)o(w)f(commands)h(to)g(dra)o(w)f(a)h(simple)i(\014gure.)120 +1119 y Fq(\\centertexdraw{)168 1171 y(\\drawdim)22 b(cm)48 +b(\\linewd)23 b(0.02)168 1223 y(\\move\(2)g(2\))g(\\lvec\(3)g(3\))h +(\\lvec\(2)f(4\))g(\\lvec\(1)g(3\))h(\\lvec\(2)f(2\))168 +1275 y(\\textref)f(h:C)i(v:C)f(\\htext\(2)g(3\){$\\sum)g(\\rho_n$})120 +1327 y(})856 1635 y @beginspecial -28 @hoffset -57 @voffset +@setspecial +%%BeginDocument: texdraw.ps2 +50 dict begin +/mv {stroke moveto} def +/lv {lineto} def +/st {currentpoint stroke moveto} def +/sl {st setlinewidth} def +/sd {st 0 setdash} def +/sg {st setgray} def +/bs {gsave} def /es {stroke grestore} def +/fl {gsave setgray fill grestore + currentpoint newpath moveto} def +/fp {gsave setgray fill grestore st} def +/cv {curveto} def +/cr {gsave currentpoint newpath 3 -1 roll 0 360 arc + stroke grestore} def +/fc {gsave setgray currentpoint newpath + 3 -1 roll 0 360 arc fill grestore} def +/ar {gsave currentpoint newpath 5 2 roll arc stroke grestore} def +/el {gsave /svm matrix currentmatrix def + currentpoint translate scale newpath 0 0 1 0 360 arc + svm setmatrix stroke grestore} def +/fe {gsave setgray currentpoint translate scale newpath + 0 0 1 0 360 arc fill grestore} def +/av {/hhwid exch 2 div def /hlen exch def + /ah exch def /tipy exch def /tipx exch def + currentpoint /taily exch def /tailx exch def + /dx tipx tailx sub def /dy tipy taily sub def + /alen dx dx mul dy dy mul add sqrt def + /blen alen hlen sub def + gsave tailx taily translate dy dx atan rotate + (V) ah ne {blen 0 gt {blen 0 lineto} if} {alen 0 lineto} ifelse + stroke blen hhwid neg moveto alen 0 lineto blen hhwid lineto + (T) ah eq {closepath} if + (W) ah eq {gsave 1 setgray fill grestore closepath} if + (F) ah eq {fill} {stroke} ifelse + grestore tipx tipy moveto} def +0.24 0.24 scale +1 setlinecap 1 setlinejoin +3 setlinewidth [] 0 setdash +0 0 moveto +2 sl +236 236 mv +354 354 lv +236 472 lv +118 354 lv +236 236 lv +stroke end showpage +%%EndDocument + @endspecial 926 1496 a Fm(P)977 1529 y Fl(\032)1001 +1536 y Fk(n)62 1773 y Ft(This)17 b(dra)o(wing)f(uses)g(units)h(of)e +(cen)o(timetres,)h(with)h(a)e(line)j(width)e(of)g(0.02)f(cm.)22 +b(The)16 b Fo(x)j Ft(co)q(ordinate)d(ranges)0 1836 y(b)q(et)o(w)o(een)f +(1)g(and)g(3)g(while)h(the)f Fo(y)k Ft(co)q(ordinate)c(ranges)g(b)q(et) +o(w)o(een)g(2)g(and)g(4.)k(When)d(included)h(in)o(to)e(a)g(do)q(cumen)o +(t,)0 1898 y(the)20 b(size)g(of)g(the)f(dra)o(wing)h(is)g(2)f(cm)h(b)o +(y)g(2)f(cm.)34 b(The)19 b(dra)o(wing)h(is)g(placed)h(in)g(a)e(T)1471 +1908 y(E)1496 1898 y(X)h(b)q(o)o(x,)h(with)f(the)f(lo)o(w)o(er)0 +1960 y(lefthand)f(corner)g(of)f(the)h(b)q(o)o(x)f(corresp)q(onding)i +(to)e(T)924 1970 y(E)949 1960 y(Xdra)o(w)g(co)q(ordinate)h +Fq(\(1)d(2\))j Ft(and)f(the)h(upp)q(er)h(righ)o(thand)0 +2022 y(corner)d(at)f Fq(\(3)g(4\))p Ft(.)21 b(The)16 +b Fq(\\centertexdraw)e Ft(command)i(cen)o(ters)g(the)f(dra)o(wing)h +(horizon)o(tally)l(.)23 b(The)16 b Fq(\\textref)0 2085 +y Ft(command)d(con)o(trols)f(the)h(cen)o(tering)h(of)e(the)h(text.)19 +b(The)13 b(text)f(in)i(this)f(dra)o(wing)g(is)g(cen)o(tered)g(\(b)q +(oth)g(horizon)o(tally)0 2147 y(and)i(v)o(ertically\))h(at)f(the)g(co)q +(ordinate)h Fq(\(2)f(3\))p Ft(.)0 2382 y Fs(2.4)33 b(Co)r(ordinate)15 +b(sp)r(eci\014cation)62 2521 y Ft(Co)q(ordinates)h(are)f(sp)q +(eci\014ed)j(within)f(paren)o(theses,)e(with)h(blanks)g(\(but)g(no)f +(comma\))g(b)q(et)o(w)o(een)h(the)f(v)m(alues.)0 2583 +y(Leading)h(blanks)f(and)g(trailing)h(blanks)g(are)e(p)q(ermitted)i +(within)g(the)f(paren)o(theses.)20 b(The)15 b(co)q(ordinates)g(refer)g +(to)0 2645 y(units,)20 b(whic)o(h)f(are)f(sp)q(eci\014ed)j(b)o(y)d(the) +h Fq(\\drawdim)e Ft(command.)30 b(The)19 b(default)g(is)g(inc)o(hes,)h +(but)f(an)o(y)f(v)m(alid)i(T)1890 2655 y(E)1916 2645 +y(X)p eop +%%Page: 7 9 +7 8 bop 0 -83 a Ft(Chapter)15 b(2:)k(Using)d(the)g(T)464 +-73 y(E)489 -83 y(Xdra)o(w)f(Commands)1068 b(7)0 158 +y(dimension)16 b(unit)g(can)e(b)q(e)i(sp)q(eci\014ed.)21 +b(Sym)o(b)q(olic)16 b(sp)q(eci\014cation)h(of)d(sa)o(v)o(ed)g(co)q +(ordinate)h(v)m(alues)h(will)g(b)q(e)f(discused)0 221 +y(later)g(\(see)g(Section)h(3.3)f([Sa)o(ving)g(p)q(ositions],)g(page)g +(18\).)0 378 y Fq(\\drawdim)f Fo(dim)240 440 y Ft(Set)j(the)h(units)g +(to)e Fo(dim)p Ft(.)27 b(The)18 b(argumen)o(t)e Fo(dim)i +Ft(can)g(b)q(e)g(an)o(y)f(v)m(alid)i(T)1458 450 y(E)1483 +440 y(X)f(dimension)h(unit.)27 b(The)240 502 y(units)16 +b(are)g(used)g(to)f(in)o(terpret)h(co)q(ordinate)g(v)m(alues.)23 +b(Examples)16 b(of)f(v)m(alid)j(units:)j Fq(cm)p Ft(,)15 +b Fq(mm)p Ft(,)h Fq(in)p Ft(,)f Fq(pt)p Ft(,)240 564 +y(and)g Fq(bp)p Ft(.)62 712 y(Examples)h(of)f(co)q(ordinate)g(and)h +(scaling)g(sp)q(eci\014cations:)0 859 y Fq(\\drawdim)e({cm})h +(\\move\(2)f(2\))240 921 y Ft(Set)j(the)g(units)h(to)e(cen)o(timetres,) +i(mo)o(v)o(e)e(to)g(a)h(p)q(osition)h(2)f(cm)g(to)f(the)h(righ)o(t)g +(and)g(2)g(cm)g(up)h(from)240 983 y(the)d(origin)h(of)f(the)g(dra)o +(wing)g(co)q(ordinate)h(system.)0 1065 y Fq(\\drawdim)e(bp)240 +1128 y Ft(Set)h(the)h(units)f(to)g(big)h(p)q(oin)o(ts.)0 +1210 y Fq(\\lvec)e(\()h(2.2)g(+5.5\))g(\\lvec\(2.3)f(-2\))g +(\\lvec\(2.2)g(5.4)h(\))240 1272 y Ft(Examples)h(of)e(acceptable)j(co)q +(ordinate)e(sp)q(eci\014cations.)0 1487 y Fs(2.5)33 b(Line)16 +b(v)n(ectors)62 1624 y Ft(T)87 1634 y(E)113 1624 y(Xdra)o(w)10 +b(implemen)o(ts)h(mo)o(v)o(es,)g(line)h(v)o(ectors)e(and)g(arro)o(w)g +(v)o(ectors.)17 b(There)11 b(are)f(b)q(oth)h(absolute)g(and)f(relativ)o +(e)0 1686 y(motion)i(v)o(ersions)h(of)e(these)i(v)o(ector)e(commands.) +19 b(T)883 1696 y(E)909 1686 y(Xdra)o(w)11 b(main)o(tains)i(a)f(curren) +o(t)g(p)q(osition.)20 b(Lines)13 b(are)f(dra)o(wn)0 1748 +y(from)i(the)h(curren)o(t)f(p)q(osition)i(to)e(a)h(new)g(co)q +(ordinate,)f(with)i(the)e(new)h(co)q(ordinate)g(b)q(ecoming)h(the)f +(new)g(curren)o(t)0 1811 y(p)q(osition.)23 b(An)16 b(explicit)i(mo)o(v) +o(e)d(can)h(b)q(e)g(used)g(to)g(establish)g(a)g(new)g(curren)o(t)g(p)q +(osition.)22 b(The)16 b(p)q(osition)h Fq(\(0)e(0\))g +Ft(is)0 1873 y(used)h(if)f(there)h(is)f(no)h(mo)o(v)o(e)e(to)h(an)g +(initial)i(curren)o(t)e(p)q(osition.)62 2010 y(The)f +Fq(\\move)f Ft(and)g Fq(\\rmove)g Ft(commands)g(establish)i(a)e(new)g +(curren)o(t)h(p)q(osition)g(without)f(dra)o(wing)h(a)f(line.)21 +b(The)0 2072 y Fq(\\lvec)14 b Ft(and)i Fq(\\rlvec)e Ft(commands)h(dra)o +(w)f(a)h(line)i(from)e(the)g(curren)o(t)g(p)q(osition)h(to)f(a)f(new)i +(p)q(osition,)g(whic)o(h)g(then)0 2135 y(b)q(ecomes)c(the)f(new)g +(curren)o(t)g(p)q(osition.)19 b(The)12 b Fq(\\avec)e +Ft(and)h Fq(\\ravec)f Ft(commands)h(dra)o(w)f(a)h(line)i(with)e(an)g +(arro)o(whead)0 2197 y(from)j(the)h(curren)o(t)g(p)q(osition)h(to)e(a)h +(new)g(co)q(ordinate,)g(whic)o(h)h(then)f(b)q(ecomes)h(the)f(new)g +(curren)o(t)g(p)q(osition.)21 b(The)0 2259 y(tip)16 b(of)f(the)h(arro)o +(w)e(is)i(at)e(the)i(new)g(curren)o(t)f(p)q(osition.)22 +b(The)15 b(direction)i(of)e(the)h(arro)o(w)e(follo)o(ws)h(the)h +(direction)g(of)0 2321 y(the)d(line.)21 b(Since)15 b(this)e(direction)i +(is)f(unde\014ned)h(for)d(zero)h(length)h(v)o(ectors,)f(these)g(are)g +(not)g(allo)o(w)o(ed)g(for)g Fq(\\avec)f Ft(or)0 2384 +y Fq(\\ravec)p Ft(.)23 b(Zero)16 b(length)h(arro)o(w)e(v)o(ectors)h +(will)i(generate)f(a)f(P)o(ostScript)g(prin)o(t)h(error:)22 +b Fq(undefinedresult)p Ft(.)g(F)l(or)0 2446 y(an)o(y)14 +b(non-zero)h(length)h(v)o(ector,)d(the)i(full)h(size)g(arro)o(whead)e +(is)h(dra)o(wn,)f(ev)o(en)h(if)g(that)f(arro)o(whead)g(is)h(longer)g +(than)0 2508 y(the)g(line)i(length.)62 2645 y(The)f(absolute)f(motion)g +(v)o(ersions)h(of)e(these)i(commands)f(sp)q(ecify)h(the)g(co)q +(ordinate)f(of)g(the)g(\014nal)h(p)q(osition.)p eop +%%Page: 8 10 +8 9 bop 0 -83 a Ft(8)1745 b(T)1793 -73 y(E)1819 -83 y(Xdra)o(w)0 +158 y Fq(\\move)14 b(\()p Fo(x)19 b(y)t Fq(\))240 221 +y Ft(Mo)o(v)o(e)14 b(to)h(co)q(ordinate)g Fq(\()p Fo(x)k(y)t +Fq(\))p Ft(.)g(The)d(new)f(curren)o(t)g(p)q(osition)h(is)g +Fq(\()p Fo(x)i(y)t Fq(\))p Ft(.)0 307 y Fq(\\lvec)c(\()p +Fo(x)19 b(y)t Fq(\))240 370 y Ft(Dra)o(w)c(a)h(line)i(from)d(the)h +(curren)o(t)g(p)q(osition)h(to)f(co)q(ordinate)h Fq(\()p +Fo(x)h(y)t Fq(\))p Ft(.)k(The)16 b(new)h(curren)o(t)f(p)q(osition)240 +432 y(is)g Fq(\()p Fo(x)i(y)t Fq(\))p Ft(.)0 519 y Fq(\\avec)c(\()p +Fo(x)19 b(y)t Fq(\))240 581 y Ft(Dra)o(w)c(a)i(line)h(with)f(an)g(arro) +o(whead)e(from)h(the)h(curren)o(t)g(p)q(osition)g(to)f +Fq(\()p Fo(x)i(y)t Fq(\))p Ft(.)24 b(The)17 b(new)g(curren)o(t)240 +643 y(p)q(osition)f(is)g Fq(\()p Fo(x)i(y)t Fq(\))p Ft(.)i(The)15 +b(arro)o(whead)f(is)i(aligned)h(with)e(the)g(line,)i(with)e(the)h(tip)f +(at)g Fq(\()p Fo(x)j(y)t Fq(\))p Ft(.)62 792 y(The)k(relativ)o(e)h +(motion)f(v)o(ersions)g(of)f(these)i(commands)e(in)o(terpret)i(the)f +(co)q(ordinates)g(as)g(displacemen)o(ts)0 855 y(relativ)o(e)f(to)e(the) +i(curren)o(t)f(p)q(osition.)36 b(Giv)o(en)20 b(the)h(displacemen)o(ts)g +Fq(\()p Fo(dx)e(dy)t Fq(\))h Ft(as)g(a)f(parameter,)i(eac)o(h)f(of)g +(the)0 917 y(relativ)o(e)c(motion)f(commands)g(mo)o(v)o(es)f +Fo(dx)19 b Ft(units)d(in)g(the)f Fo(x)j Ft(direction)f(and)e +Fo(dy)k Ft(units)d(in)g(the)g Fo(y)j Ft(direction.)0 +1078 y Fq(\\rmove)14 b(\()p Fo(dx)19 b(dy)t Fq(\))240 +1140 y Ft(Mo)o(v)o(e)h(from)g(the)g(curren)o(t)h(p)q(osition,)i +Fo(dx)h Ft(units)d(in)g(the)g Fo(x)j Ft(direction)e(and)f +Fo(dy)j Ft(units)e(in)f(the)g Fo(y)240 1203 y Ft(direction.)g(The)16 +b(\014nal)g(p)q(osition)g(b)q(ecomes)g(the)f(new)g(curren)o(t)g(p)q +(osition.)0 1289 y Fq(\\rlvec)f(\()p Fo(dx)19 b(dy)t +Fq(\))240 1352 y Ft(Dra)o(w)14 b(a)h(line)i(from)e(the)g(curren)o(t)h +(p)q(osition,)g Fo(dx)j Ft(units)d(in)g(the)f Fo(x)k +Ft(direction)d(and)g Fo(dy)k Ft(units)c(in)g(the)240 +1414 y Fo(y)j Ft(direction.)i(The)16 b(\014nal)g(p)q(osition)g(b)q +(ecomes)g(the)f(new)g(curren)o(t)h(p)q(osition.)0 1501 +y Fq(\\ravec)e(\()p Fo(dx)19 b(dy)t Fq(\))240 1563 y +Ft(Dra)o(w)c(a)h(line)i(with)f(an)f(arro)o(whead)f(from)h(the)g(curren) +o(t)h(p)q(osition,)g Fo(dx)j Ft(units)d(in)g(the)f Fo(x)k +Ft(direction)240 1625 y(and)e Fo(y)j Ft(units)d(in)g(the)f +Fo(y)k Ft(direction.)28 b(The)18 b(\014nal)g(p)q(osition)g(b)q(ecomes)g +(the)g(new)f(curren)o(t)g(p)q(osition.)240 1687 y(The)e(arro)o(whead)g +(is)g(aligned)i(with)e(the)h(line,)g(with)g(the)f(tip)h(at)e(the)i(new) +f(curren)o(t)g(p)q(osition.)62 1837 y(Lines)e(can)e(b)q(e)h(customized) +g(with)g(commands)f(to)f(c)o(hange)h(the)h(line)g(width,)h(line)g +(pattern)d(and)i(line)g(gra)o(y)f(lev)o(el)0 1899 y(rendition.)21 +b(In)16 b(addition,)g(commands)f(for)g(c)o(hanging)g(the)g(t)o(yp)q(e)h +(and)f(size)h(of)f(the)g(arro)o(whead)g(are)f(a)o(v)m(ailable.)0 +2060 y Fq(\\linewd)g Fo(width)240 2123 y Ft(Set)19 b(the)g(line)h +(width)g(to)e Fo(width)h Ft(units.)31 b(Initially)22 +b Fo(width)d Ft(is)g(0.01)f(inc)o(hes)i(\(corresp)q(onding)f(to)f(3)240 +2185 y(pixels)f(at)d(300)h(pixels)h(to)f(the)g(inc)o(h\).)0 +2271 y Fq(\\lpatt)f(\()p Fo(pattern)p Fq(\))240 2334 +y Ft(Set)21 b(lines)h(to)e(ha)o(v)o(e)h(the)f(pattern)h +Fq(\()p Fo(pattern)p Fq(\))p Ft(.)36 b(A)20 b(pattern)h(is)g(a)f +(sequence)i(of)f(on/o\013)e(lengths)240 2396 y(separated)e(b)o(y)g +(blanks)g(and)h(enclosed)g(in)g(paren)o(theses.)25 b(The)17 +b(lengths)h(alternately)g(sp)q(ecify)g(the)240 2458 y(length)g(of)f(a)h +(dash)f(and)h(the)g(length)g(of)f(a)g(gap)h(b)q(et)o(w)o(een)f(dashes.) +28 b(Eac)o(h)17 b(length)h(is)g(in)o(terpreted)240 2521 +y(using)c(the)g(curren)o(t)f(scaling)i(and)e(dra)o(wing)h(units.)20 +b(The)13 b(pattern)g(is)h(used)g(cyclically)l(.)23 b(The)13 +b(empt)o(y)240 2583 y(pattern)k(signi\014es)i(a)e(solid)i(line.)28 +b(The)18 b(initial)i(line)f(pattern)e(is)h(a)f(solid)i(line,)g(corresp) +q(onding)g(to)240 2645 y(the)c(empt)o(y)g(pattern)g Fq(\\lpatt)f(\(\))p +Ft(.)p eop +%%Page: 9 11 +9 10 bop 0 -83 a Ft(Chapter)15 b(2:)k(Using)d(the)g(T)464 +-73 y(E)489 -83 y(Xdra)o(w)f(Commands)1068 b(9)0 158 +y Fq(\\setgray)14 b Fo(lev)o(el)240 221 y Ft(Set)19 b(the)g(gra)o(y)f +(lev)o(el)i(of)e(lines.)32 b(Gra)o(y)18 b(lev)o(els)i(are)f(real)g(v)m +(alues)h(from)e(0)g(\(blac)o(k\))h(through)g(in)o(ter-)240 +283 y(mediate)e(v)m(alues)g(\(gra)o(y\))e(to)h(1)g(\(white\).)23 +b(The)17 b(initial)i(gra)o(y)c(lev)o(el)j(is)f(0)f(corresp)q(onding)h +(to)f(blac)o(k.)0 477 y Fq(\\arrowheadtype)d(t:)p Fo(t)o(yp)q(e)240 +539 y Ft(Set)k(the)h(arro)o(whead)e(t)o(yp)q(e)h(to)g +Fo(t)o(yp)q(e)p Ft(,)g(where)h Fo(t)o(yp)q(e)i Ft(is)d(one)h(of)f +Fq(F)p Ft(,)g Fq(T)p Ft(,)g Fq(W)p Ft(,)g Fq(V)p Ft(,)g(or)g +Fq(H)p Ft(.)26 b(There)17 b(are)g(t)o(w)o(o)240 601 y(kinds)i(of)e +(arro)o(wheads.)27 b(The)18 b(\014rst)f(kind)i(is)f(a)f(triangle.)29 +b(There)18 b(are)f(3)g(v)m(arian)o(ts:)25 b(t)o(yp)q(e)18 +b Fq(T)g Ft(is)g(an)240 664 y(empt)o(y)e(triangle,)h(t)o(yp)q(e)g +Fq(F)f Ft(is)h(a)f(\014lled)j(triangle)e(\(using)g(the)g(curren)o(t)f +(gra)o(y)f(lev)o(el)j(for)e(lines\),)i(t)o(yp)q(e)240 +726 y Fq(W)e Ft(is)g(a)g(triangle)h(\014lled)h(with)e(white.)23 +b(The)17 b(second)f(kind)h(of)f(arro)o(whead)f(is)i(an)f(op)q(en)g +(ended)i(V)l(ee.)240 788 y(There)c(are)f(2)h(v)m(arian)o(ts:)19 +b(t)o(yp)q(e)13 b Fq(V)h Ft(has)f(the)h(stem)f(con)o(tin)o(ue)i(to)e +(the)g(tip,)i(t)o(yp)q(e)e Fq(H)h Ft(has)f(the)h(stem)f(stop)240 +851 y(at)i(the)g(base)g(of)g(the)g(arro)o(whead.)k(The)c(initial)j +(arro)o(whead)c(t)o(yp)q(e)h(is)h Fq(T)p Ft(.)0 982 y +Fq(\\arrowheadsize)d(l:)p Fo(length)j Fq(w:)p Fo(width)240 +1045 y Ft(Set)j(the)h(arro)o(whead)e(size)i(to)f(b)q(e)h +Fo(length)g Ft(units)g(long)g(and)f Fo(width)h Ft(units)g(wide.)33 +b(The)20 b(width)f(is)240 1107 y(measured)d(across)e(the)i(\\base")f +(of)g(the)h(arro)o(whead.)j(The)d(initial)i(arro)o(whead)c(size)j(has)e +(a)g Fo(length)240 1169 y Ft(of)g(0.16)f(inc)o(hes)i(and)f(a)g +Fo(width)h Ft(of)f(0.08)f(inc)o(hes.)62 1363 y(Note)h(that)f(the)i +(lines)g(whic)o(h)g(outline)h(the)e(arro)o(whead)f(will)j(b)q(e)f(dra)o +(wn)e(with)i(the)f(same)g(line)i(pattern)d(used)0 1426 +y(for)j(the)h(stem.)28 b(Normally)l(,)19 b(arro)o(w)e(v)o(ectors)g(are) +h(dra)o(wn)f(with)h(the)g(line)i(pattern)e(set)f(for)h(a)f(solid)i +(line.)30 b(Note)0 1488 y(that)14 b(the)g(\014ll)i(lev)o(el)g(used)f +(for)f(the)g Fq(F)g Ft(v)m(arian)o(t)h(of)f(the)g(arro)o(whead)g(uses)g +(the)h(same)f(gra)o(y)f(lev)o(el)j(as)e(used)h(for)f(lines.)0 +1550 y(The)k(di\013erence)g(b)q(et)o(w)o(een)g(the)f +Fq(T)h Ft(v)m(arian)o(t)f(and)h(the)f Fq(W)g Ft(v)m(arian)o(t)h(only)g +(sho)o(ws)e(up)i(if)g(the)f(arro)o(whead)g(is)h(placed)0 +1612 y(o)o(v)o(er)c(non-white)i(areas)f(of)g(the)g(dra)o(wing.)20 +b(The)15 b Fq(W)g Ft(v)m(arian)o(t)g(obliterates)h(the)f(area)g(under)h +(the)f(arro)o(whead.)62 1772 y(Examples)h(of)f(line)i(parameter)d(and)h +(arro)o(whead)g(settings)g(are)g(sho)o(wn)g(in)h(the)f(follo)o(wing)h +(co)q(de.)120 1921 y Fq(\\centertexdraw{)168 1972 y(\\drawdim)22 +b(in)168 2024 y(\\linewd)h(0.03)g(\\setgray)g(0.6)g(\\arrowheadtype)f +(t:F)i(\\avec\(0)e(0.5\))168 2076 y(\\linewd)h(0.01)g(\\setgray)g(0)71 +b(\\arrowheadtype)22 b(t:V)i(\\avec\(0.5)e(0.5\))168 +2128 y(\\linewd)h(0.015)g(\\lpatt\(0.067)f(0.1\))h(\\lvec)h(\(1)f(0\)) +168 2180 y(\\linewd)g(0.02)g(\\lpatt\(\))g(\\arrowheadtype)f(t:T)h +(\\avec\(1.5)g(0.5\))168 2232 y(\\arrowheadtype)f(t:H)h(\\avec\(2.0)g +(0.5\))168 2284 y(\\setgray)f(0.4)i(\\arrowheadtype)e(t:W)h +(\\avec\(3.0)g(0\))120 2336 y(})525 2645 y @beginspecial +0 @hoffset 0 @voffset @setspecial +%%BeginDocument: texdraw.ps3 +50 dict begin +/mv {stroke moveto} def +/lv {lineto} def +/st {currentpoint stroke moveto} def +/sl {st setlinewidth} def +/sd {st 0 setdash} def +/sg {st setgray} def +/bs {gsave} def /es {stroke grestore} def +/fl {gsave setgray fill grestore + currentpoint newpath moveto} def +/fp {gsave setgray fill grestore st} def +/cv {curveto} def +/cr {gsave currentpoint newpath 3 -1 roll 0 360 arc + stroke grestore} def +/fc {gsave setgray currentpoint newpath + 3 -1 roll 0 360 arc fill grestore} def +/ar {gsave currentpoint newpath 5 2 roll arc stroke grestore} def +/el {gsave /svm matrix currentmatrix def + currentpoint translate scale newpath 0 0 1 0 360 arc + svm setmatrix stroke grestore} def +/fe {gsave setgray currentpoint translate scale newpath + 0 0 1 0 360 arc fill grestore} def +/av {/hhwid exch 2 div def /hlen exch def + /ah exch def /tipy exch def /tipx exch def + currentpoint /taily exch def /tailx exch def + /dx tipx tailx sub def /dy tipy taily sub def + /alen dx dx mul dy dy mul add sqrt def + /blen alen hlen sub def + gsave tailx taily translate dy dx atan rotate + (V) ah ne {blen 0 gt {blen 0 lineto} if} {alen 0 lineto} ifelse + stroke blen hhwid neg moveto alen 0 lineto blen hhwid lineto + (T) ah eq {closepath} if + (W) ah eq {gsave 1 setgray fill grestore closepath} if + (F) ah eq {fill} {stroke} ifelse + grestore tipx tipy moveto} def +0.24 0.24 scale +1 setlinecap 1 setlinejoin +3 setlinewidth [] 0 setdash +0 0 moveto +9 sl +0.6 sg +150 150 (F) 48 24 av +3 sl +0 sg +300 150 (V) 48 24 av +4 sl +[20 30] sd +450 0 lv +6 sl +[] sd +600 150 (T) 48 24 av +750 150 (H) 48 24 av +0.4 sg +900 0 (W) 48 24 av +stroke end showpage +%%EndDocument + @endspecial 558 2523 a(t:F)753 2544 y(t:V)999 2523 y(t:T)1203 +2544 y(t:H)1293 2645 y(t:W)p eop +%%Page: 10 12 +10 11 bop 0 -83 a Ft(10)1722 b(T)1793 -73 y(E)1819 -83 +y(Xdra)o(w)0 158 y Fs(2.6)33 b(T)156 172 y(E)191 158 +y(X)15 b(text)62 296 y Ft(T)l(ext)i(ma)o(y)g(b)q(e)g(sup)q(erimp)q +(osed)i(on)e(the)h(dra)o(wing.)25 b(The)17 b(text)g(argumen)o(t)f(of)h +(the)g Fq(\\htext)g Ft(command)f(is)i(in)0 358 y(horizon)o(tal)12 +b(mo)q(de.)20 b(This)12 b(text)g(can)g(b)q(e)h(ordinary)g(text,)e(math) +h(mo)q(de)h(expressions,)g(or)e(ev)o(en)i(more)f(complicated)0 +420 y(b)q(o)o(xes)17 b(consisting)h(of)e(tables)i(and)f(the)g(lik)o(e.) +26 b(The)17 b(resulting)h(T)1111 430 y(E)1137 420 y(X)f(text)f(is)i +(placed)g(in)f(a)g(b)q(o)o(x.)25 b(The)17 b(reference)0 +483 y(p)q(oin)o(t)11 b(of)g(the)f(b)q(o)o(x)h(can)g(b)q(e)g(c)o(hosen)h +(to)e(b)q(e)h(one)g(of)f(nine)i(lo)q(cations:)19 b(horizon)o(tally)11 +b(left,)h(cen)o(ter)f(or)f(righ)o(t;)i(v)o(ertically)0 +545 y(top,)i(cen)o(ter)i(or)e(b)q(ottom.)19 b(The)d Fq(\\htext)e +Ft(command)h(tak)o(es)g(one)g(of)g(t)o(w)o(o)f(forms.)0 +709 y Fq(\\htext)g(\()p Fo(x)k(y)t Fq(\){)p Fo(text)q +Fq(})0 771 y(\\htext)c({)p Fo(text)q Fq(})240 833 y Ft(The)19 +b(\014rst)g(form)f(of)h(this)g(command)g(places)h(the)f(T)1150 +843 y(E)1176 833 y(X)g(text)f Fo(text)i Ft(horizon)o(tally)g(with)f +(the)g(text)240 896 y(reference)12 b(p)q(oin)o(t)f(at)g(the)g(co)q +(ordinate)h Fq(\()p Fo(x)18 b(y)t Fq(\))p Ft(.)g(The)11 +b(new)h(curren)o(t)f(p)q(osition)h(is)g Fq(\()p Fo(x)18 +b(y)t Fq(\))p Ft(.)g(The)11 b(second)240 958 y(form)f(of)f(this)i +(command)f(places)i(the)e(T)903 968 y(E)928 958 y(X)h(text)f +Fo(text)g Ft(horizon)o(tally)i(with)e(the)h(text)e(reference)i(p)q(oin) +o(t)240 1020 y(at)k(the)g(curren)o(t)g(p)q(osition.)21 +b(The)15 b(text)g(reference)h(p)q(oin)o(t)g(is)f(set)g(with)h(the)f +Fq(\\textref)f Ft(command.)62 1171 y(T)l(ext)j(can)g(b)q(e)h(placed)g +(v)o(ertically)g(using)g(the)f Fq(\\vtext)f Ft(command.)25 +b(The)17 b(text)f(argumen)o(t)g(is)i(in)g(horizon)o(tal)0 +1233 y(mo)q(de.)j(The)16 b(T)260 1243 y(E)286 1233 y(X)f(text)g(is)i +(placed)f(in)h(a)e(b)q(o)o(x)h(and)f(then)h(rotated)f(coun)o(terclo)q +(c)o(kwise.)22 b(The)16 b(reference)g(p)q(oin)o(t)g(is)0 +1295 y(the)e(p)q(oin)o(t)g(in)g(the)g(b)q(o)o(x,)g Fo(b)q(efore)i +Ft(rotation)d(of)g(the)h(text.)19 b(Not)13 b(all)h(P)o(ostScript)g +(prin)o(ter)g(driv)o(ers)g(supp)q(ort)f(v)o(ertical)0 +1358 y(text.)0 1521 y Fq(\\vtext)h(\(x)h(y\){)p Fo(text)q +Fq(})0 1584 y(\\vtext)f({)p Fo(text)q Fq(})240 1646 y +Ft(The)23 b(\014rst)f(form)g(of)h(this)g(command)f(places)i(the)f(T) +1180 1656 y(E)1205 1646 y(X)g(text)f Fo(text)i Ft(v)o(ertically)g(with) +f(the)f(text)240 1708 y(reference)g(p)q(oin)o(t)g(at)f(the)g(co)q +(ordinate)h Fq(\()p Fo(x)c(y)t Fq(\))p Ft(.)38 b(The)22 +b(new)g(curren)o(t)f(p)q(osition)h(is)g Fq(\()p Fo(x)d(y)t +Fq(\))p Ft(.)38 b(The)240 1770 y(second)13 b(form)e(of)g(this)i +(command)f(places)h(the)f(T)1057 1780 y(E)1082 1770 y(X)g(text)g +Fo(text)g Ft(v)o(ertically)h(with)g(the)f(text)f(reference)240 +1833 y(p)q(oin)o(t)17 b(at)f(the)h(curren)o(t)f(p)q(osition.)26 +b(In)17 b(b)q(oth)g(cases,)f(the)h(T)1252 1842 y(E)1278 +1833 y(X)f(text)h(is)g(placed)h(in)f(a)f(b)q(o)o(x)h(and)g(the)240 +1895 y(b)q(o)o(x)d(is)g(rotated)f(coun)o(terclo)q(c)o(kwise)j(b)o(y)d +(90)h(degrees)g(ab)q(out)g(the)g(text)g(reference)g(p)q(oin)o(t.)20 +b(The)14 b(text)240 1957 y(reference)i(p)q(oin)o(t)g(is)f(set)g(with)h +(the)f Fq(\\textref)f Ft(command.)62 2108 y(T)l(ext)i(can)g(b)q(e)g +(placed)h(at)e(an)h(arbitrary)f(angle)h(using)g(the)g +Fq(\\rtext)f Ft(command.)21 b(The)16 b(text)f(argumen)o(t)g(is)h(in)0 +2170 y(horizon)o(tal)d(mo)q(de.)19 b(The)12 b(T)465 2180 +y(E)491 2170 y(X)g(text)g(is)g(placed)i(in)f(a)f(b)q(o)o(x)g(and)g +(then)h(rotated)e(coun)o(terclo)q(c)o(kwise.)20 b(The)12 +b(reference)0 2232 y(p)q(oin)o(t)i(is)g(the)g(p)q(oin)o(t)g(in)g(the)g +(b)q(o)o(x,)f Fo(b)q(efore)k Ft(rotation)c(of)g(the)g(text.)19 +b(Not)13 b(all)i(P)o(ostScript)e(prin)o(ter)h(driv)o(ers)g(supp)q(ort)0 +2295 y(rotated)g(text.)0 2458 y Fq(\\rtext)g(td:)p Fo(angle)k +Fq(\(x)d(y\){)p Fo(text)q Fq(})0 2521 y(\\rtext)f(td:)p +Fo(angle)k Fq({)p Fo(text)q Fq(})240 2583 y Ft(The)i(\014rst)f(form)f +(of)h(this)h(command)f(places)h(the)g(T)1153 2593 y(E)1178 +2583 y(X)g(text)f Fo(text)g Ft(at)g(an)g(angle)h(with)g(the)f(text)240 +2645 y(reference)j(p)q(oin)o(t)g(at)f(the)g(co)q(ordinate)h +Fq(\()p Fo(x)c(y)t Fq(\))p Ft(.)38 b(The)22 b(new)g(curren)o(t)f(p)q +(osition)h(is)g Fq(\()p Fo(x)d(y)t Fq(\))p Ft(.)38 b(The)p +eop +%%Page: 11 13 +11 12 bop 0 -83 a Ft(Chapter)15 b(2:)k(Using)d(the)g(T)464 +-73 y(E)489 -83 y(Xdra)o(w)f(Commands)1046 b(11)240 158 +y(second)23 b(form)e(of)h(this)h(command)f(places)i(the)e(T)1129 +168 y(E)1155 158 y(X)g(text)g Fo(text)h Ft(at)e(an)i(angle)f(with)h +(the)f(text)240 221 y(reference)f(p)q(oin)o(t)g(at)f(the)h(curren)o(t)f +(p)q(osition.)37 b(In)21 b(b)q(oth)f(cases,)i(the)e(T)1491 +230 y(E)1517 221 y(X)g(text)g(is)h(placed)h(in)f(a)240 +283 y(b)q(o)o(x)15 b(and)g(the)g(b)q(o)o(x)f(is)i(rotated)e(coun)o +(terclo)q(c)o(kwise)i(b)o(y)e Fo(angle)k Ft(degrees)d(ab)q(out)g(the)g +(text)f(reference)240 345 y(p)q(oin)o(t.)20 b(The)c(text)e(reference)i +(p)q(oin)o(t)g(is)g(set)f(with)g(the)h Fq(\\textref)e +Ft(command.)62 525 y(The)19 b(reference)g(p)q(oin)o(t)f(for)g +(subsequen)o(t)g(T)807 535 y(E)833 525 y(X)g(text)g(in)h(a)f +Fq(\\htext)p Ft(,)f Fq(\\vtext)h Ft(or)f Fq(\\rtext)h +Ft(command)g(is)g(set)0 587 y(with)e(the)f Fq(\\textref)f +Ft(command.)0 795 y Fq(\\textref)g(h:)p Fo(h-ref)24 b +Fq(v:)p Fo(v-ref)240 857 y Ft(Set)17 b(the)h(text)e(reference)i(p)q +(oin)o(t)g(for)f(subsequen)o(t)h(text)e(commands.)26 +b(The)18 b(horizon)o(tal)f(reference)240 920 y(p)q(oin)o(t)f +Fo(h-ref)25 b Ft(is)16 b(one)f(of)h Fq(L)p Ft(,)f Fq(C)g +Ft(or)g Fq(R)g Ft(\(left,)h(cen)o(ter)f(or)g(righ)o(t\).)21 +b(The)16 b(v)o(ertical)g(reference)g(p)q(oin)o(t)g Fo(v-ref)240 +982 y Ft(is)k(one)f(of)g Fq(T)p Ft(,)h Fq(C)f Ft(or)f +Fq(B)h Ft(\(top,)h(cen)o(ter)f(or)f(b)q(ottom\).)31 b(F)l(or)19 +b(rotated)f(text,)h(the)h(reference)g(p)q(oin)o(t)f(is)240 +1044 y(determined)f(b)q(efore)f(rotation.)24 b(The)17 +b(initial)i(text)d(reference)i(p)q(oin)o(t)f(corresp)q(onds)g(to)f +Fq(\\textref)240 1106 y(h:L)f(v:B)p Ft(.)92 2029 y @beginspecial +220 @hoffset 96 @voffset @setspecial +%%BeginDocument: texdraw.ps4 +50 dict begin +/mv {stroke moveto} def +/lv {lineto} def +/st {currentpoint stroke moveto} def +/sl {st setlinewidth} def +/sd {st 0 setdash} def +/sg {st setgray} def +/bs {gsave} def /es {stroke grestore} def +/fl {gsave setgray fill grestore + currentpoint newpath moveto} def +/fp {gsave setgray fill grestore st} def +/cv {curveto} def +/cr {gsave currentpoint newpath 3 -1 roll 0 360 arc + stroke grestore} def +/fc {gsave setgray currentpoint newpath + 3 -1 roll 0 360 arc fill grestore} def +/ar {gsave currentpoint newpath 5 2 roll arc stroke grestore} def +/el {gsave /svm matrix currentmatrix def + currentpoint translate scale newpath 0 0 1 0 360 arc + svm setmatrix stroke grestore} def +/fe {gsave setgray currentpoint translate scale newpath + 0 0 1 0 360 arc fill grestore} def +/av {/hhwid exch 2 div def /hlen exch def + /ah exch def /tipy exch def /tipx exch def + currentpoint /taily exch def /tailx exch def + /dx tipx tailx sub def /dy tipy taily sub def + /alen dx dx mul dy dy mul add sqrt def + /blen alen hlen sub def + gsave tailx taily translate dy dx atan rotate + (V) ah ne {blen 0 gt {blen 0 lineto} if} {alen 0 lineto} ifelse + stroke blen hhwid neg moveto alen 0 lineto blen hhwid lineto + (T) ah eq {closepath} if + (W) ah eq {gsave 1 setgray fill grestore closepath} if + (F) ah eq {fill} {stroke} ifelse + grestore tipx tipy moveto} def +0.24 0.24 scale +1 setlinecap 1 setlinejoin +3 setlinewidth [] 0 setdash +0 0 moveto +bs +bs +-450 0 mv +6 0 fc +es +bs +-720 0 mv +6 0 fc +es +bs +-180 0 mv +6 0 fc +es +bs +-450 90 mv +6 0 fc +es +bs +-450 -90 mv +6 0 fc +es +bs +-720 -90 mv +6 0 fc +es +-720 -90 mv +-720 90 lv +bs +6 0 fc +es +-180 90 lv +bs +6 0 fc +es +-180 -90 lv +bs +6 0 fc +es +-720 -90 lv +es +bs +bs +450 0 mv +6 0 fc +es +bs +259 -191 mv +6 0 fc +es +bs +641 191 mv +6 0 fc +es +bs +386 64 mv +6 0 fc +es +bs +514 -64 mv +6 0 fc +es +bs +323 -255 mv +6 0 fc +es +323 -255 mv +195 -127 lv +bs +6 0 fc +es +577 255 lv +bs +6 0 fc +es +705 127 lv +bs +6 0 fc +es +323 -255 lv +es +stroke end showpage +%%EndDocument + @endspecial 400 1612 a(Horizon)o(tal)g(T)l(ext)473 1676 +y Fq(h:C)24 b(v:C)96 1644 y(h:L)f(v:C)588 b(h:R)23 b(v:C)473 +1522 y(h:C)h(v:T)473 1766 y(h:C)g(v:B)96 1734 y(h:L)f(v:B)96 +1554 y(h:L)g(v:T)588 b(h:R)23 b(v:T)851 1734 y(h:R)g(v:B)1444 +1617 y + gsave currentpoint currentpoint translate 45 neg rotate neg exch neg +exch translate + 1444 1617 a -133 w Ft(Rotated)15 b(T)l(ext)1444 +1617 y + currentpoint grestore moveto + 1444 1617 a 1470 1643 a + gsave currentpoint currentpoint translate 45 neg rotate neg exch neg +exch translate + 1470 1643 a 1386 1671 +a Fq(h:C)24 b(v:C)1470 1643 y + currentpoint grestore moveto + 1470 1643 a 1249 1838 a + gsave currentpoint currentpoint translate 45 neg rotate neg exch neg +exch translate + +1249 1838 a 1082 1852 a Fq(h:L)f(v:C)1249 1838 y + currentpoint grestore moveto + 1249 +1838 a 1665 1422 a + gsave currentpoint currentpoint translate 45 neg rotate neg exch neg +exch translate + 1665 1422 a 14 x Fq(h:R)g(v:C)1665 +1422 y + currentpoint grestore moveto + 1665 1422 a 1380 1553 a + gsave currentpoint currentpoint translate 45 neg rotate neg exch neg +exch translate + 1380 1553 a -84 w Fq(h:C)h(v:T)1380 +1553 y + currentpoint grestore moveto + 1380 1553 a 1534 1707 a + gsave currentpoint currentpoint translate 45 neg rotate neg exch neg +exch translate + 1534 1707 a 1450 1735 +a Fq(h:C)g(v:B)1534 1707 y + currentpoint grestore moveto + 1534 1707 a 1313 1902 a + gsave currentpoint currentpoint translate 45 neg rotate neg exch neg +exch translate + 1313 +1902 a 1146 1916 a Fq(h:L)f(v:B)1313 1902 y + currentpoint grestore moveto + 1313 1902 +a 1185 1774 a + gsave currentpoint currentpoint translate 45 neg rotate neg exch neg +exch translate + 1185 1774 a 1018 1788 a Fq(h:L)g(v:T)1185 +1774 y + currentpoint grestore moveto + 1185 1774 a 1601 1358 a + gsave currentpoint currentpoint translate 45 neg rotate neg exch neg +exch translate + 1601 1358 a 14 x Fq(h:R)g(v:T)1601 +1358 y + currentpoint grestore moveto + 1601 1358 a 1729 1486 a + gsave currentpoint currentpoint translate 45 neg rotate neg exch neg +exch translate + 1729 1486 a 14 x Fq(h:R)g(v:B)1729 +1486 y + currentpoint grestore moveto + 1729 1486 a 62 2182 a Ft(The)18 b(fon)o(t)f(used)h(to)f(render)h +(the)g(text)f(is)h(determined)h(as)e(for)g(an)o(y)g(other)g(T)1392 +2191 y(E)1418 2182 y(X)h(text.)26 b(Normally)18 b(the)g(fon)o(t)0 +2244 y(used)h(outside)f(of)g(T)346 2254 y(E)371 2244 +y(Xdra)o(w)g(is)g(in)h(e\013ect.)28 b(If)18 b(desired,)i(other)d(fon)o +(ts)g(can)h(b)q(e)h(sp)q(eci\014ed)h(as)e(part)f(of)h(the)g(text.)0 +2306 y(An)o(y)d(fon)o(t)g(c)o(hanges)g(within)h(a)f(T)563 +2316 y(E)589 2306 y(Xdra)o(w)f(text)h(command)g(remain)h(lo)q(cal)g(to) +f(that)f(command.)62 2458 y(Only)g(the)f(co)q(ordinate)h(of)e(the)h +(text)f(reference)i(p)q(oin)o(t)f(in)h(a)f Fq(\\htext)p +Ft(,)f Fq(\\vtext)g Ft(or)g Fq(\\rtext)g Ft(command)h(is)g(used)0 +2521 y(in)k(calculating)g(the)f(size)h(of)e(the)h(dra)o(wing.)21 +b(This)c(means)f(that)f(text)g(itself)i(can)f(spill)h(outside)g(of)e +(the)h(dra)o(wing)0 2583 y(area)i(determined)i(b)o(y)f(T)435 +2593 y(E)461 2583 y(Xdra)o(w.)30 b(The)19 b(area)f(of)g(the)h(dra)o +(wing)g(can)g(b)q(e)g(increased)h(to)f(include)i(the)e(text)f(b)o(y)0 +2645 y(issuing)e(additional)h Fq(\\move)e Ft(commands.)p +eop +%%Page: 12 14 +12 13 bop 0 -83 a Ft(12)1722 b(T)1793 -73 y(E)1819 -83 +y(Xdra)o(w)120 158 y Fq(\\centertexdraw{)430 210 y(\\avec\(-0.75)23 +b(-0.25\))g(\\textref)f(h:R)i(v:C)f(\\htext{H-text})168 +262 y(\\move\(0)g(0\))g(\\avec\(-0.75)g(+0.25\))g(\\textref)f(h:R)i +(v:B)f(\\htext{H-text})168 314 y(\\move\(0)g(0\))g(\\avec\(0)g(+0.5\)) +143 b(\\textref)22 b(h:L)i(v:T)f(\\vtext{V-text})168 +366 y(\\move\(0)g(0\))g(\\avec\(+0.75)g(+0.25\))g(\\textref)f(h:L)i +(v:B)f(\\htext{H-text})168 418 y(\\move\(0)g(0\))g(\\avec\(+0.75)g +(-0.25\))g(\\textref)f(h:L)i(v:C)f(\\htext{H-text})120 +470 y(})62 598 y Ft(Sup)q(erimp)q(osed)f(on)d(this)g(example)h(is)g(a)f +(shaded)h(region)f(sho)o(wing)g(the)h(limits)g(of)f(the)g(T)1642 +608 y(E)1668 598 y(Xdra)o(w)f(b)q(o)o(x)h(as)0 660 y(determined)e(b)o +(y)e(the)g(co)q(ordinates)g(sp)q(eci\014ed.)629 1097 +y @beginspecial 83 @hoffset 22 @voffset @setspecial +%%BeginDocument: texdraw.ps5 +50 dict begin +/mv {stroke moveto} def +/lv {lineto} def +/st {currentpoint stroke moveto} def +/sl {st setlinewidth} def +/sd {st 0 setdash} def +/sg {st setgray} def +/bs {gsave} def /es {stroke grestore} def +/fl {gsave setgray fill grestore + currentpoint newpath moveto} def +/fp {gsave setgray fill grestore st} def +/cv {curveto} def +/cr {gsave currentpoint newpath 3 -1 roll 0 360 arc + stroke grestore} def +/fc {gsave setgray currentpoint newpath + 3 -1 roll 0 360 arc fill grestore} def +/ar {gsave currentpoint newpath 5 2 roll arc stroke grestore} def +/el {gsave /svm matrix currentmatrix def + currentpoint translate scale newpath 0 0 1 0 360 arc + svm setmatrix stroke grestore} def +/fe {gsave setgray currentpoint translate scale newpath + 0 0 1 0 360 arc fill grestore} def +/av {/hhwid exch 2 div def /hlen exch def + /ah exch def /tipy exch def /tipx exch def + currentpoint /taily exch def /tailx exch def + /dx tipx tailx sub def /dy tipy taily sub def + /alen dx dx mul dy dy mul add sqrt def + /blen alen hlen sub def + gsave tailx taily translate dy dx atan rotate + (V) ah ne {blen 0 gt {blen 0 lineto} if} {alen 0 lineto} ifelse + stroke blen hhwid neg moveto alen 0 lineto blen hhwid lineto + (T) ah eq {closepath} if + (W) ah eq {gsave 1 setgray fill grestore closepath} if + (F) ah eq {fill} {stroke} ifelse + grestore tipx tipy moveto} def +0.24 0.24 scale +1 setlinecap 1 setlinejoin +3 setlinewidth [] 0 setdash +0 0 moveto +-225 -75 mv +-225 150 lv +225 150 lv +225 -75 lv +0.9 fl +0 0 mv +-225 -75 (T) 48 24 av +0 0 mv +-225 75 (T) 48 24 av +0 0 mv +0 150 (T) 48 24 av +0 0 mv +225 75 (T) 48 24 av +0 0 mv +225 -75 (T) 48 24 av +stroke end showpage +%%EndDocument + @endspecial -9 w(H-text)620 932 y(H-text)974 857 y + gsave currentpoint currentpoint translate 90 neg rotate neg exch neg +exch translate + 974 +857 a 31 x Ft(V-text)974 857 y + currentpoint grestore moveto + 974 857 a 1199 932 a Ft(H-text)1199 +1097 y(H-text)0 1335 y Fs(2.7)33 b(Circles,)15 b(ellipses)h(and)f(arcs) +62 1473 y Ft(T)87 1483 y(E)113 1473 y(Xdra)o(w)h(supplies)i(commands)e +(to)g(generate)g(circles,)i(ellipses)g(and)f(arcs.)23 +b(There)16 b(are)g(t)o(w)o(o)f(forms)h(of)g(the)0 1536 +y(circle)h(command.)22 b(The)16 b Fq(\\lcir)f Ft(command)g(dra)o(ws)g +(a)g(circle)j(of)d(giv)o(en)h(radius.)22 b(The)16 b Fq(\\fcir)f +Ft(command)h(dra)o(ws)0 1598 y(a)h(\014lled)i(circle.)28 +b(In)18 b(the)f(latter)g(case,)h(the)f(circle)i(is)f(\014lled)h(b)o(y)e +(a)g(sp)q(eci\014ed)j(gra)o(y)c(lev)o(el.)27 b(F)l(or)17 +b(the)g(\014lled)j(circle,)0 1660 y(the)d(line)i(de\014ning)f(the)f +(circumference)i(of)d(the)h(circle)h(is)g(not)e(dra)o(wn.)25 +b(Note)16 b(that)h(the)g(gra)o(y)e(lev)o(el)k(area)d(\014lled)0 +1723 y(in)h(b)o(y)g(the)f Fq(\\fcir)g Ft(command)g(is)h(opaque,)g(ev)o +(en)g(if)g(the)f(\014ll)i(is)f(c)o(hosen)g(to)f(b)q(e)h(white.)24 +b(F)l(or)16 b(either)h(form)f(of)g(the)0 1785 y(circle)h(command,)e +(the)g(dra)o(wing)g(size)h(is)g(increased)g(if)g(necessary)f(to)g(con)o +(tain)g(the)g(circle.)62 1923 y(The)c Fq(\\lellip)f Ft(command)h +(generates)f(an)h(ellipse)i(sp)q(eci\014ed)g(b)o(y)e(the)g(radius)g(of) +f(the)h(ellipse)i(in)f(the)f Fo(x)j Ft(direction)0 1986 +y(and)k(the)g(radius)h(of)e(the)h(ellipse)i(in)f(the)f +Fo(y)k Ft(direction.)29 b(The)19 b(ellipse)h(is)e(symmetrical)h(ab)q +(out)f(horizon)o(tal)g(and)0 2048 y(v)o(ertical)g(lines)h(dra)o(wn)f +(through)f(the)h(curren)o(t)f(p)q(oin)o(t.)28 b(The)18 +b Fq(\\fellip)e Ft(command)i(dra)o(ws)f(a)g(\014lled)j(ellipse.)29 +b(In)0 2110 y(the)16 b(latter)g(case,)g(the)g(ellipse)j(is)e(\014lled)h +(b)o(y)e(a)g(sp)q(eci\014ed)i(gra)o(y)d(lev)o(el.)24 +b(F)l(or)16 b(the)g(\014lled)i(ellipse,)g(the)f(line)g(de\014ning)0 +2172 y(the)e(b)q(oundary)g(of)f(the)h(ellipse)i(is)e(not)g(dra)o(wn.)k +(F)l(or)14 b(either)h(form)f(of)g(the)h(ellipse)i(command,)e(the)f(dra) +o(wing)h(size)0 2235 y(is)h(increased)g(if)g(necessary)f(to)g(con)o +(tain)g(the)g(ellipse.)62 2373 y(The)g Fq(\\larc)f Ft(command)h +(generates)g(a)f(coun)o(terclo)q(c)o(kwise)i(arc)f(sp)q(eci\014ed)i(b)o +(y)e(a)f(start)g(angle)h(in)h(degrees)f(and)0 2435 y(an)h(end)g(angle)h +(in)g(degrees.)22 b(The)16 b(cen)o(ter)g(of)f(the)h(arc)g(is)g(the)g +(curren)o(t)g(p)q(osition.)23 b(Only)17 b(the)f(arc)g(is)g(dra)o(wn,)f +(not)0 2498 y(the)j(line)i(joining)g(the)e(cen)o(ter)h(to)e(the)i(b)q +(eginning)h(of)e(the)h(arc.)29 b(Note)18 b(that)f(the)i +Fq(\\larc)e Ft(command)i(do)q(es)f(not)0 2560 y(a\013ect)c(the)i(size)g +(of)f(the)g(dra)o(wing.)p eop +%%Page: 13 15 +13 14 bop 0 -83 a Ft(Chapter)15 b(2:)k(Using)d(the)g(T)464 +-73 y(E)489 -83 y(Xdra)o(w)f(Commands)1046 b(13)0 158 +y Fq(\\lcir)14 b(r:)p Fo(radius)240 221 y Ft(Dra)o(w)j(a)h(circle)j +(with)d(cen)o(ter)h(at)f(the)h(curren)o(t)f(p)q(osition.)31 +b(The)19 b(radius)g(is)g(sp)q(eci\014ed)h(b)o(y)f Fo(radius)p +Ft(.)240 283 y(This)d(command)g(dra)o(ws)f(a)g(line)j(along)e(the)f +(circumference)j(of)d(the)h(circle.)23 b(The)16 b(dra)o(wing)g(size)g +(is)240 345 y(increased)g(if)g(necessary)f(to)g(con)o(tain)g(the)h +(circle.)0 498 y Fq(\\fcir)e(f:)p Fo(lev)o(el)19 b Fq(r:)p +Fo(radius)240 560 y Ft(Dra)o(w)h(a)g(\014lled)j(circle)g(with)e(cen)o +(ter)g(at)f(the)h(curren)o(t)g(p)q(osition.)38 b(The)21 +b(radius)h(is)f(sp)q(eci\014ed)i(b)o(y)240 622 y Fo(radius)p +Ft(.)28 b(The)18 b(circle)i(is)e(pain)o(ted)h(with)f(the)g(gra)o(y)e +(lev)o(el)j(sp)q(eci\014ed)h(b)o(y)e Fo(lev)o(el)p Ft(.)29 +b(A)18 b(gra)o(y)f(lev)o(el)i(of)e(1)240 684 y(corresp)q(onds)g(to)f +(white,)h(with)g(decreasing)g(v)m(alues)h(getting)e(dark)o(er.)23 +b(The)17 b(lev)o(el)h(0)e(is)h(full)h(blac)o(k.)240 747 +y(This)k(command)f(do)q(es)h(not)f(dra)o(w)f(a)i(line)h(along)e(the)g +(circumference.)40 b(The)22 b(dra)o(wing)f(size)h(is)240 +809 y(increased)16 b(if)g(necessary)f(to)g(con)o(tain)g(the)h(circle.)0 +961 y Fq(\\lellip)e(rx:)p Fo(x-radius)k Fq(ry:)p Fo(y-radius)240 +1024 y Ft(Dra)o(w)i(an)g(ellipse)j(with)e(cen)o(ter)g(at)f(the)h +(curren)o(t)g(p)q(osition.)37 b(The)21 b(radius)g(in)h(the)f +Fo(x)j Ft(direction)240 1086 y(is)19 b(sp)q(eci\014ed)i(b)o(y)e +Fo(x-radius)p Ft(.)32 b(The)19 b(radius)g(in)h(the)f +Fo(y)k Ft(direction)d(is)f(sp)q(eci\014ed)i(b)o(y)e Fo(y-radius)p +Ft(.)32 b(The)240 1148 y(dra)o(wing)15 b(size)h(is)g(increased)g(if)g +(necessary)f(to)g(con)o(tain)g(the)h(ellipse.)0 1300 +y Fq(\\fellip)e(f:)p Fo(lev)o(el)k Fq(rx:)p Fo(x-radius)g +Fq(ry:)p Fo(y-radius)240 1363 y Ft(Dra)o(w)c(a)h(\014lled)i(ellipse)h +(with)e(cen)o(ter)f(at)g(the)g(curren)o(t)h(p)q(osition.)21 +b(The)16 b(radius)g(in)g(the)f Fo(x)k Ft(direction)240 +1425 y(is)g(sp)q(eci\014ed)i(b)o(y)e Fo(x-radius)p Ft(.)32 +b(The)19 b(radius)g(in)h(the)f Fo(y)k Ft(direction)d(is)f(sp)q +(eci\014ed)i(b)o(y)e Fo(y-radius)p Ft(.)32 b(The)240 +1487 y(ellipse)16 b(is)e(pain)o(ted)h(with)f(the)g(gra)o(y)e(lev)o(el)j +(sp)q(eci\014ed)h(b)o(y)e Fo(lev)o(el)p Ft(.)20 b(A)14 +b(gra)o(y)f(lev)o(el)i(of)e(1)h(corresp)q(onds)g(to)240 +1550 y(white,)i(with)g(decreasing)h(v)m(alues)g(getting)e(dark)o(er.)21 +b(The)16 b(lev)o(el)h(0)f(is)g(full)h(blac)o(k.)22 b(This)16 +b(command)240 1612 y(do)q(es)h(not)f(dra)o(w)g(a)g(line)i(along)e(the)h +(b)q(oundary)g(of)f(the)g(ellipse.)26 b(The)17 b(dra)o(wing)f(size)i +(is)f(increased)240 1674 y(if)f(necessary)f(to)g(con)o(tain)g(the)g +(ellipse.)0 1826 y Fq(\\larc)f(r:)p Fo(radius)k Fq(sd:)p +Fo(start-angle)f Fq(ed:)p Fo(end-angle)240 1889 y Ft(Dra)o(w)9 +b(a)h(coun)o(terclo)q(c)o(kwise)h(arc.)18 b(The)11 b(cen)o(ter)f(of)g +(the)g(arc)g(is)h(at)e(the)i(curren)o(t)f(p)q(osition.)19 +b(The)10 b(radius)240 1951 y(is)j(sp)q(eci\014ed)i(b)o(y)e +Fo(radius)p Ft(.)19 b(The)13 b(start)f(and)h(end)g(angles)h(\(in)f +(degrees\))f(are)h(sp)q(eci\014ed)i(b)o(y)d Fo(start-angle)240 +2013 y Ft(and)j Fo(end-angle)p Ft(.)22 b(This)15 b(command)g(do)q(es)h +(not)f(a\013ect)f(the)i(limits)g(\(size\))g(of)e(the)i(dra)o(wing.)62 +2228 y(As)f(an)h(example,)f(the)h(follo)o(wing)f(commands)g(dra)o(w)g +(a)g(\014lled)i(circle,)f(and)g(sup)q(erimp)q(ose)g(an)g(arc.)120 +2387 y Fq(\\centertexdraw{)168 2439 y(\\linewd)23 b(0.02)168 +2491 y(\\fcir)g(f:0.7)g(r:1)168 2543 y(\\larc)g(r:1)g(sd:45)h(ed:135) +168 2595 y(\\lvec)f(\(+0.707)g(+0.707\))g(\\move)g(\(0)g(0\))h(\\lvec)f +(\(-0.707)g(+0.707\))120 2647 y(})p eop +%%Page: 14 16 +14 15 bop 0 -83 a Ft(14)1722 b(T)1793 -73 y(E)1819 -83 +y(Xdra)o(w)675 575 y @beginspecial 72 @hoffset 72 @voffset +@setspecial +%%BeginDocument: texdraw.ps6 +50 dict begin +/mv {stroke moveto} def +/lv {lineto} def +/st {currentpoint stroke moveto} def +/sl {st setlinewidth} def +/sd {st 0 setdash} def +/sg {st setgray} def +/bs {gsave} def /es {stroke grestore} def +/fl {gsave setgray fill grestore + currentpoint newpath moveto} def +/fp {gsave setgray fill grestore st} def +/cv {curveto} def +/cr {gsave currentpoint newpath 3 -1 roll 0 360 arc + stroke grestore} def +/fc {gsave setgray currentpoint newpath + 3 -1 roll 0 360 arc fill grestore} def +/ar {gsave currentpoint newpath 5 2 roll arc stroke grestore} def +/el {gsave /svm matrix currentmatrix def + currentpoint translate scale newpath 0 0 1 0 360 arc + svm setmatrix stroke grestore} def +/fe {gsave setgray currentpoint translate scale newpath + 0 0 1 0 360 arc fill grestore} def +/av {/hhwid exch 2 div def /hlen exch def + /ah exch def /tipy exch def /tipx exch def + currentpoint /taily exch def /tailx exch def + /dx tipx tailx sub def /dy tipy taily sub def + /alen dx dx mul dy dy mul add sqrt def + /blen alen hlen sub def + gsave tailx taily translate dy dx atan rotate + (V) ah ne {blen 0 gt {blen 0 lineto} if} {alen 0 lineto} ifelse + stroke blen hhwid neg moveto alen 0 lineto blen hhwid lineto + (T) ah eq {closepath} if + (W) ah eq {gsave 1 setgray fill grestore closepath} if + (F) ah eq {fill} {stroke} ifelse + grestore tipx tipy moveto} def +0.24 0.24 scale +1 setlinecap 1 setlinejoin +3 setlinewidth [] 0 setdash +0 0 moveto +6 sl +300 0.7 fc +300 45 135 ar +212 212 lv +0 0 mv +-212 212 lv +stroke end showpage +%%EndDocument + @endspecial 62 712 a(Note)18 b(that)g(for)g(the)g(arc)h(command,)f +(the)h(resulting)g(\014gure)g(can)g(spill)h(outside)f(of)f(the)h(T)1644 +722 y(E)1669 712 y(Xdra)o(w)f(b)q(o)o(x)g(as)0 774 y(determined)13 +b(b)o(y)e(the)h(maxim)o(um)f(excursions)i(of)e(the)g(co)q(ordinates.)19 +b(Extra)11 b(mo)o(v)o(es)g(can)g(b)q(e)i(used)f(to)f(comp)q(ensate)0 +837 y(for)k(the)g(size)h(of)f(the)g(arc.)0 1049 y Fs(2.8)33 +b(Bezier)15 b(curv)n(es)62 1186 y Ft(Bezier)i(curv)o(es)e(in)i(T)419 +1196 y(E)444 1186 y(Xdra)o(w)e(use)h(4)f(reference)h(co)q(ordinates,)g +(t)o(w)o(o)e(as)h(the)h(end)g(p)q(oin)o(ts)g(and)f(t)o(w)o(o)g(others)g +(to)0 1248 y(con)o(trol)g(the)g(shap)q(e)h(of)f(the)g(curv)o(e.)21 +b(Let)15 b(the)g(4)g(p)q(oin)o(ts)h(b)q(e)g Fq(\()p Fo(x0)i(y0)t +Fq(\))p Ft(,)c Fq(\()p Fo(x1)19 b(y1)t Fq(\))p Ft(,)14 +b Fq(\()p Fo(x2)k(y2)t Fq(\))d Ft(and)g Fq(\()p Fo(x3)j(y3)t +Fq(\))p Ft(.)i(The)0 1310 y(curv)o(e)f(starts)e(out)i(tangen)o(t)f(to)g +(the)g(line)j(joining)f(the)e(\014rst)h(t)o(w)o(o)e(p)q(oin)o(ts)i(and) +g(ends)g(up)h(tangen)o(t)d(to)h(the)h(line)0 1373 y(joining)14 +b(the)g(second)g(t)o(w)o(o)e(p)q(oin)o(ts.)20 b(The)13 +b(con)o(trol)g(p)q(oin)o(ts)h(\\pull")h(at)e(the)g(curv)o(e)h(to)e(con) +o(trol)i(the)f(curv)m(ature.)20 b(The)0 1435 y(amoun)o(t)14 +b(of)h(pull)i(increases)f(with)g(the)f(distance)h(of)f(the)g(con)o +(trol)g(p)q(oin)o(t)h(from)e(the)h(endp)q(oin)o(t.)62 +1572 y(As)h(the)h(parameter)e Fl(\026)i Ft(v)m(aries)g(from)e(0)h(to)g +(1,)f(the)i(co)q(ordinates)f(of)g(the)g(Bezier)i(curv)o(e)e(are)g(giv)o +(en)h(b)o(y)f(a)g(pair)0 1634 y(of)f(parametric)g(cubic)i(equations,) +398 1715 y Fo(x)p Ft(\()p Fl(\026)p Ft(\))12 b(=)h(\(1)d +Fr(\000)g Fl(\026)p Ft(\))686 1696 y Fn(3)705 1715 y +Fo(x0)g Ft(+)g(3)p Fl(\026)p Ft(\(1)g Fr(\000)g Fl(\026)p +Ft(\))998 1696 y Fn(2)1017 1715 y Fo(x1)g Ft(+)g(3)p +Fl(\026)1169 1696 y Fn(2)1188 1715 y Ft(\(1)g Fr(\000)g +Fl(\026)p Ft(\))p Fo(x2)g Ft(+)g Fl(\026)1458 1696 y +Fn(3)1477 1715 y Fo(x3)398 1790 y(y)p Ft(\()p Fl(\026)p +Ft(\))i(=)h(\(1)d Fr(\000)g Fl(\026)p Ft(\))686 1771 +y Fn(3)705 1790 y Fo(y0)g Ft(+)g(3)p Fl(\026)p Ft(\(1)g +Fr(\000)g Fl(\026)p Ft(\))998 1771 y Fn(2)1017 1790 y +Fo(y1)g Ft(+)g(3)p Fl(\026)1169 1771 y Fn(2)1188 1790 +y Ft(\(1)g Fr(\000)g Fl(\026)p Ft(\))p Fo(y2)g Ft(+)g +Fl(\026)1458 1771 y Fn(3)1477 1790 y Fo(y3)15 b Fl(:)0 +1938 y Fq(\\clvec)f(\()p Fo(x1)19 b(y1)t Fq(\)\()p Fo(x2)e(y2)t +Fq(\)\()p Fo(x3)h(y3)t Fq(\))240 2001 y Ft(Dra)o(w)9 +b(a)i(Bezier)h(curv)o(e)f(from)f(the)g(curren)o(t)h(p)q(osition)h(to)e +(the)g(co)q(ordinate)i Fq(\()p Fo(x3)18 b(y3)t Fq(\))10 +b Ft(whic)o(h)h(b)q(ecomes)240 2063 y(the)h(new)g(curren)o(t)g(p)q +(osition.)20 b(The)13 b(co)q(ordinates)f Fq(\()p Fo(x1)18 +b(y1)t Fq(\))11 b Ft(and)i Fq(\()p Fo(x2)18 b(y2)t Fq(\))11 +b Ft(serv)o(e)h(as)g(con)o(trol)g(p)q(oin)o(ts)240 2125 +y(for)h(the)h(curv)o(e.)20 b(Only)15 b(the)f(last)g(co)q(ordinate)g +(giv)o(en)h(is)f(used)h(to)e(up)q(date)i(the)f(size)h(of)e(the)h(dra)o +(wing.)0 2271 y(Note)h(that)g(only)h(3)f(co)q(ordinate)h(pairs)g(are)f +(sp)q(eci\014ed.)23 b(The)16 b(other)f(p)q(oin)o(t)h(is)g(the)g(curren) +o(t)f(p)q(osition)i(b)q(efore)f(the)0 2334 y Fq(\\clvec)f +Ft(command)i(is)g(executed.)24 b(Only)17 b(the)g(last)f(co)q(ordinate)h +(sp)q(eci\014ed)h(in)f(the)g Fq(\\clvec)e Ft(command)i(is)f(used)0 +2396 y(to)j(determine)h(the)f(exten)o(t)g(of)g(the)g(dra)o(wing.)32 +b(While)20 b(the)f(Bezier)i(curv)o(e)e(passes)g(through)g(the)g(old)h +(curren)o(t)0 2458 y(p)q(osition)c(and)f(the)g(new)g(curren)o(t)g(p)q +(osition,)h(in)g(general)f(the)g(curv)o(e)g(will)i(not)e(reac)o(h)f +(the)h(in)o(termediate)h(con)o(trol)0 2521 y(p)q(oin)o(ts.)26 +b(The)17 b(curv)o(e)g(is)h(alw)o(a)o(ys)e(en)o(tirely)i(enclosed)h(b)o +(y)e(the)g(con)o(v)o(ex)g(quadrilateral)h(de\014ned)g(b)o(y)f(the)h(t)o +(w)o(o)d(end)0 2583 y(p)q(oin)o(ts)h(and)f(the)g(t)o(w)o(o)f(con)o +(trol)h(p)q(oin)o(ts.)20 b(Note)15 b(that)f(the)h(curv)o(e)g(ma)o(y)g +(pass)g(outside)h(the)f(limits)h(of)f(the)g(dra)o(wing)0 +2645 y(as)g(determined)h(b)o(y)f(the)h(end)g(p)q(oin)o(t)f(of)g(the)g +(curv)o(e.)p eop +%%Page: 15 17 +15 16 bop 0 -83 a Ft(Chapter)15 b(2:)k(Using)d(the)g(T)464 +-73 y(E)489 -83 y(Xdra)o(w)f(Commands)1046 b(15)62 158 +y(A)16 b(simple)g(Bezier)h(curv)o(e)e(is)h(pro)q(duced)g(b)o(y)f(the)g +(follo)o(wing)h(example.)120 293 y Fq(\\btexdraw)168 +345 y(\\move)23 b(\(0)g(0\))168 396 y(\\clvec)g(\(0)g(1\)\(1)h(0\)\(1)f +(1\))120 448 y(\\etexdraw)62 583 y Ft(This)17 b(example)h(is)f(the)f +(righ)o(tmost)f(of)i(the)f(follo)o(wing)h(Bezier)h(curv)o(es.)24 +b(The)16 b(dra)o(wings)g(also)h(sho)o(w)f(the)g(end)0 +645 y(p)q(oin)o(ts)g(and)f(the)g(con)o(trol)g(p)q(oin)o(ts)h(for)e(eac) +o(h)i(curv)o(e.)200 1048 y @beginspecial 150 @hoffset +1 @voffset @setspecial +%%BeginDocument: texdraw.ps7 +50 dict begin +/mv {stroke moveto} def +/lv {lineto} def +/st {currentpoint stroke moveto} def +/sl {st setlinewidth} def +/sd {st 0 setdash} def +/sg {st setgray} def +/bs {gsave} def /es {stroke grestore} def +/fl {gsave setgray fill grestore + currentpoint newpath moveto} def +/fp {gsave setgray fill grestore st} def +/cv {curveto} def +/cr {gsave currentpoint newpath 3 -1 roll 0 360 arc + stroke grestore} def +/fc {gsave setgray currentpoint newpath + 3 -1 roll 0 360 arc fill grestore} def +/ar {gsave currentpoint newpath 5 2 roll arc stroke grestore} def +/el {gsave /svm matrix currentmatrix def + currentpoint translate scale newpath 0 0 1 0 360 arc + svm setmatrix stroke grestore} def +/fe {gsave setgray currentpoint translate scale newpath + 0 0 1 0 360 arc fill grestore} def +/av {/hhwid exch 2 div def /hlen exch def + /ah exch def /tipy exch def /tipx exch def + currentpoint /taily exch def /tailx exch def + /dx tipx tailx sub def /dy tipy taily sub def + /alen dx dx mul dy dy mul add sqrt def + /blen alen hlen sub def + gsave tailx taily translate dy dx atan rotate + (V) ah ne {blen 0 gt {blen 0 lineto} if} {alen 0 lineto} ifelse + stroke blen hhwid neg moveto alen 0 lineto blen hhwid lineto + (T) ah eq {closepath} if + (W) ah eq {gsave 1 setgray fill grestore closepath} if + (F) ah eq {fill} {stroke} ifelse + grestore tipx tipy moveto} def +0.24 0.24 scale +1 setlinecap 1 setlinejoin +3 setlinewidth [] 0 setdash +0 0 moveto +bs +[10] sd +-600 0 mv +6 0 fc +-600 300 lv +6 0 fc +-300 300 lv +6 0 fc +-300 0 lv +6 0 fc +[] sd +-600 0 mv +-600 300 -300 300 -300 0 cv +es +bs +[10] sd +0 0 mv +6 0 fc +150 240 lv +6 0 fc +450 240 lv +6 0 fc +300 0 lv +6 0 fc +[] sd +0 0 mv +150 300 450 300 300 0 cv +es +bs +[10] sd +600 0 mv +6 0 fc +600 300 lv +6 0 fc +900 0 lv +6 0 fc +900 300 lv +6 0 fc +[] sd +600 0 mv +600 300 900 0 900 300 cv +es +stroke end showpage +%%EndDocument + @endspecial 177 1056 a(0)177 756 y(1)348 b(2)548 1056 +y(3)206 b(0)927 816 y(1)348 b(2)1148 1056 y(3)206 b(0)1377 +756 y(1)1748 1056 y(2)1748 756 y(3)0 1341 y Fs(2.9)33 +b(Fill)17 b(commands)62 1486 y Ft(P)o(ostScript)23 b(deals)g(with)g +(paths)f(consisting)h(of)f(line)j(segmen)o(ts.)41 b(The)23 +b(paths)f(can)h(b)q(e)g(closed)g(and)g(the)0 1548 y(in)o(terior)17 +b(of)e(the)h(closed)h(region)g(\014lled.)24 b(F)l(rom)16 +b(T)843 1558 y(E)868 1548 y(Xdra)o(w,)g(paths)g(start)f(with)h(a)g +Fq(\\move)f Ft(or)h Fq(\\rmove)f Ft(command)0 1610 y(and)k(con)o(tin)o +(ue)h(with)g Fq(\\lvec)p Ft(,)f Fq(\\rlvec)f Ft(or)h +Fq(\\clvec)f Ft(commands.)32 b(The)19 b(T)1299 1620 y(E)1325 +1610 y(Xdra)o(w)f(\014ll)j(commands)e(close)h(the)0 1673 +y(path)g(and)g(\014ll)i(the)e(in)o(terior)h(of)f(the)g(closed)h +(region.)35 b(Closing)21 b(the)g(path)f(means)g(that)f(e\013ectiv)o +(ely)i(another)0 1735 y Fq(\\lvec)14 b Ft(line)j(is)f(dra)o(wn)e(from)h +(the)g(last)g(p)q(oin)o(t)g(sp)q(eci\014ed)i(to)e(the)g(initial)i(p)q +(oin)o(t.)k(T)1403 1745 y(E)1428 1735 y(Xdra)o(w)15 b(pro)o(vides)g(t)o +(w)o(o)f(forms)0 1797 y(of)g(the)g(\014ll)i(command.)j(The)c +Fq(\\ifill)e Ft(\014lls)j(the)e(in)o(terior)h(of)e(the)i(region)f(with) +h(the)f(giv)o(en)h(gra)o(y)e(lev)o(el.)21 b(The)14 b(lines)0 +1859 y(de\014ning)j(the)e(path)g(are)g(not)g(dra)o(wn.)20 +b(The)15 b Fq(\\lfill)g Ft(command)g(\014lls)i(the)e(region)h +(de\014ned)g(b)o(y)g(the)f(closed)h(path)0 1922 y(and)f(dra)o(ws)f(a)h +(line)h(along)f(the)g(enclosing)h(path.)k(Note)15 b(for)f(b)q(oth)h +(forms)f(of)g(the)h(\014ll)h(command,)f(the)g(gra)o(y)f(lev)o(el)0 +1984 y(used)i(for)e(\014lling)k(is)d(opaque,)g(ev)o(en)h(if)f(the)h +(gra)o(y)e(lev)o(el)i(is)g(c)o(hosen)g(to)e(b)q(e)i(white.)0 +2169 y Fq(\\lfill)e(f:)p Fo(lev)o(el)240 2231 y Ft(Close)i(the)f +(curren)o(t)h(path,)f(dra)o(w)g(the)g(line)j(around)d(the)h(path)f +(using)h(the)g(curren)o(t)f(grey)h(lev)o(el)h(for)240 +2293 y(lines)f(and)e(pain)o(t)h(the)f(in)o(terior)h(of)e(the)i(region)f +(with)h(sp)q(eci\014ed)h(gra)o(y)d(lev)o(el)j Fo(lev)o(el)p +Ft(.)21 b(Gra)o(y)13 b(lev)o(els)i(are)240 2356 y(real)h(v)m(alues)g +(from)e(0)h(\(blac)o(k\))g(through)g(in)o(termediate)h(v)m(alues)g +(\(gra)o(ys\))e(to)g(1)h(\(white\).)0 2458 y Fq(\\ifill)f(f:)p +Fo(lev)o(el)240 2521 y Ft(Close)j(the)g(curren)o(t)g(path)f(and)h(pain) +o(t)g(the)g(in)o(terior)g(of)g(the)g(region)g(with)g(gra)o(y)f(lev)o +(el)i Fo(lev)o(el)p Ft(.)26 b(The)240 2583 y(line)18 +b(around)d(the)h(path)g(is)h(not)e(dra)o(wn.)22 b(Gra)o(y)15 +b(lev)o(els)i(are)e(real)i(v)m(alues)g(from)e(0)h(\(blac)o(k\))f +(through)240 2645 y(in)o(termediate)h(v)m(alues)g(\(gra)o(ys\))e(to)g +(1)h(\(white\).)p eop +%%Page: 16 18 +16 17 bop 0 -83 a Ft(16)1722 b(T)1793 -73 y(E)1819 -83 +y(Xdra)o(w)62 158 y(The)14 b(follo)o(wing)h(example)f(dra)o(ws)f(a)h +(\\\015ag")e(with)j(the)e(in)o(terior)i(\014lled)g(in.)20 +b(The)14 b(path)g(around)g(the)f(b)q(oundary)0 221 y(is)j(giv)o(en)f +(in)i(a)d(clo)q(c)o(kwise)j(order)e(to)g(de\014ne)h(a)f(closed)h(path.) +k(W)l(e)15 b(could)h(tak)o(e)f(adv)m(an)o(tage)g(of)f(the)i(fact)e +(that)h(the)0 283 y(\014ll)i(command)e(will)i(close)e(an)h(op)q(en)f +(path)g(to)g(eliminate)i(one)e(of)g(the)g Fq(\\lvec)g +Ft(commands.)120 409 y Fq(\\centertexdraw{)120 461 y(\\move)23 +b(\(0.5)g(0\))120 513 y(\\lvec)g(\(0)h(0.5\))f(\\clvec)g(\(0.5)g +(0.85\)\(1)g(0.65\)\(1.5)g(1\))120 565 y(\\lvec)g(\(2)h(0.5\))f +(\\clvec)g(\(1.5)g(0.15\)\(1)g(0.35\)\(0.5)g(0\))120 +617 y(\\lfill)g(f:0.8)120 669 y(})675 1039 y @beginspecial +0 @hoffset 0 @voffset @setspecial +%%BeginDocument: texdraw.ps8 +50 dict begin +/mv {stroke moveto} def +/lv {lineto} def +/st {currentpoint stroke moveto} def +/sl {st setlinewidth} def +/sd {st 0 setdash} def +/sg {st setgray} def +/bs {gsave} def /es {stroke grestore} def +/fl {gsave setgray fill grestore + currentpoint newpath moveto} def +/fp {gsave setgray fill grestore st} def +/cv {curveto} def +/cr {gsave currentpoint newpath 3 -1 roll 0 360 arc + stroke grestore} def +/fc {gsave setgray currentpoint newpath + 3 -1 roll 0 360 arc fill grestore} def +/ar {gsave currentpoint newpath 5 2 roll arc stroke grestore} def +/el {gsave /svm matrix currentmatrix def + currentpoint translate scale newpath 0 0 1 0 360 arc + svm setmatrix stroke grestore} def +/fe {gsave setgray currentpoint translate scale newpath + 0 0 1 0 360 arc fill grestore} def +/av {/hhwid exch 2 div def /hlen exch def + /ah exch def /tipy exch def /tipx exch def + currentpoint /taily exch def /tailx exch def + /dx tipx tailx sub def /dy tipy taily sub def + /alen dx dx mul dy dy mul add sqrt def + /blen alen hlen sub def + gsave tailx taily translate dy dx atan rotate + (V) ah ne {blen 0 gt {blen 0 lineto} if} {alen 0 lineto} ifelse + stroke blen hhwid neg moveto alen 0 lineto blen hhwid lineto + (T) ah eq {closepath} if + (W) ah eq {gsave 1 setgray fill grestore closepath} if + (F) ah eq {fill} {stroke} ifelse + grestore tipx tipy moveto} def +0.24 0.24 scale +1 setlinecap 1 setlinejoin +3 setlinewidth [] 0 setdash +0 0 moveto +150 0 mv +0 150 lv +150 255 300 195 450 300 cv +600 150 lv +450 45 300 105 150 0 cv +0.8 fp +stroke end showpage +%%EndDocument + @endspecial 62 1176 a Ft(In)15 b(T)143 1186 y(E)169 +1176 y(Xdra)o(w,)e(the)i Fq(\\move)f Ft(command)g(alw)o(a)o(ys)g +(terminates)g(an)o(y)g(previous)i(paths)e(and)g(starts)g(a)g(new)g +(path.)0 1238 y(Commands)g(that)g(c)o(hange)h(line)h(parameters)e +(\(e.g.)19 b Fq(\\setgray)14 b Ft(or)g Fq(\\lpatt)p Ft(\))f(also)i +(terminate)g(paths)f(and)h(start)0 1301 y(new)i(paths.)24 +b(The)17 b(circle,)h(ellipse)h(and)e(arc)f(commands)g(do)h(not)f +(a\013ect)g(the)h(de\014nition)h(of)e(the)h(curren)o(t)f(path.)0 +1363 y(The)i Fq(\\avec)e Ft(command)h(is)h(not)f(appropriate)g(for)g +(de\014ning)i(a)e(path)g(to)g(b)q(e)h(\014lled.)28 b(It)18 +b(ends)f(a)g(subpath)h(at)f(its)0 1425 y(tail)f(and)g(b)q(egins)g(a)g +(new)f(subpath)h(at)f(its)h(tip.)21 b(Filling)c(a)e(region)h(de\014ned) +h(b)o(y)e(a)h(path)f(with)h(subpaths)f(is)h(more)0 1487 +y(complicated)h(in)f(that)e(eac)o(h)h(subpath)h(is)g(closed)g(b)q +(efore)f(\014lling.)p eop +%%Page: 17 19 +17 18 bop 0 -83 a Ft(Chapter)15 b(3:)k(Dra)o(wing)c(Segmen)o(ts)g(and)g +(Scaling)1061 b(17)0 158 y Fp(3)41 b(Dra)n(wing)15 b(Segmen)n(ts)g(and) +g(Scaling)62 335 y Ft(T)87 344 y(E)113 335 y(Xdra)o(w)d(pro)o(vides)i +(individuall)q(y)i(scaled)e(segmen)o(ts)f(whic)o(h)h(can)f(b)q(e)h +(used)f(to)g(create)g(relo)q(catable)h(dra)o(wing)0 397 +y(mo)q(dules.)0 611 y Fs(3.1)33 b(Dra)n(wing)15 b(segmen)n(ts)62 +748 y Ft(A)g(T)136 757 y(E)161 748 y(Xdra)o(w)f(dra)o(wing)g(segmen)o +(t)g(allo)o(ws)h(for)f(lo)q(cal)h(mo)q(di\014cations)h(of)e(parameters) +f(and)i(relativ)o(e)g(p)q(osition-)0 810 y(ing.)33 b(A)20 +b(T)185 820 y(E)211 810 y(Xdra)o(w)f(segmen)o(t)g(is)h(delimited)i(b)o +(y)d(a)g Fq(\\bsegment)g Ft(command)g(and)h(an)f Fq(\\esegment)f +Ft(command.)0 872 y(Inside)h(the)f(segmen)o(t,)g(the)f(initial)j +(curren)o(t)e(p)q(osition)g(is)h Fq(\(0)14 b(0\))p Ft(.)27 +b(An)o(y)18 b(c)o(hanges)g(to)f(parameters)g(suc)o(h)h(as)f(the)0 +934 y(gra)o(y)12 b(lev)o(el)i(and)f(the)f(line)j(width,)e(remain)h(lo)q +(cal)f(to)f(the)h(segmen)o(t.)19 b(Segmen)o(ts)12 b(are)h(implemen)o +(ted)h(in)g(T)1774 944 y(E)1799 934 y(X)f(using)0 997 +y(a)i Fq(\\begingroup)f Ft(and)h Fq(\\endgroup)p Ft(.)k(Segmen)o(ts)c +(can)g(b)q(e)h(nested.)0 1153 y Fq(\\bsegment)240 1216 +y Ft(Start)22 b(a)g(dra)o(wing)h(segmen)o(t.)42 b(The)23 +b(co)q(ordinate)g(system)f(is)i(shifted)f(suc)o(h)g(that)f(the)h +(curren)o(t)240 1278 y(p)q(osition)d(corresp)q(onds)g(to)f(the)g(co)q +(ordinate)h Fq(\(0)15 b(0\))p Ft(.)32 b(Changes)19 b(to)f(scaling,)j(p) +q(osition)g(and)e(line)240 1340 y(parameters)14 b(sta)o(y)h(lo)q(cal)h +(to)e(the)i(dra)o(wing)f(segmen)o(t.)0 1422 y Fq(\\esegment)240 +1484 y Ft(End)25 b(a)f(dra)o(wing)g(segmen)o(t.)47 b(The)25 +b(curren)o(t)f(p)q(osition)h(in)h(e\013ect)e(b)q(efore)h(the)f(corresp) +q(onding)240 1547 y Fq(\\bsegment)d Ft(command)h(is)h(restored.)41 +b(The)23 b(scaling)g(and)g(line)h(parameter)d(v)m(alues)j(rev)o(ert)e +(to)240 1609 y(those)15 b(in)h(e\013ect)f(b)q(efore)g(the)h(corresp)q +(onding)g Fq(\\bsegment)e Ft(command)h(w)o(as)f(in)o(v)o(ok)o(ed.)0 +1823 y Fs(3.2)33 b(Dra)n(wing)15 b(paths)62 1960 y Ft(Certain)h(subtle) +h(in)o(teractions)f(o)q(ccur)g(b)q(et)o(w)o(een)h(dra)o(wing)e(segmen)o +(ts)h(and)g(\014ll)h(op)q(erations.)22 b(In)17 b(P)o(ostScript,)0 +2022 y(lines)e(are)f(dra)o(wn)f(b)o(y)h(\014rst)f(de\014ning)j(a)d +(path,)h(then)g(later)g(stroking)f(the)h(path)g(to)f(dra)o(w)g(the)h +(line.)21 b(In)14 b(T)1780 2032 y(E)1806 2022 y(Xdra)o(w,)0 +2084 y(this)j(stroking)g(o)q(ccurs)g(when)g(the)g(line)h(is)f +(terminated,)g(sa)o(y)f(b)o(y)h(a)f Fq(\\move)g Ft(command.)24 +b(P)o(ostScript)17 b(paths)f(are)0 2146 y(in)o(terrupted)k(b)o(y)l(,)f +(but)g(con)o(tin)o(ue)h(after)e(a)g(dra)o(wing)h(segmen)o(t.)30 +b(This)20 b(means)f(that)f(a)g(path)h(started)f(b)q(efore)h(a)0 +2209 y(segmen)o(t)13 b(ma)o(y)f(not)h(b)q(e)h(strok)o(ed)f(\(dra)o +(wn\))f(un)o(til)j(after)d(the)i(segmen)o(t)e(ends.)20 +b(Consider)14 b(the)f(follo)o(wing)h(example.)120 2335 +y Fq(\\move)23 b(\(0)h(0\))120 2387 y(\\lvec)f(\(1)h(1\))120 +2439 y(\\bsegment)168 2491 y(\\move)f(\(-0.25)g(-0.25\))168 +2543 y(\\fcir)g(f:0.8)g(r:0.5)120 2595 y(\\esegment)120 +2647 y(\\move)g(\(0)h(0\))p eop +%%Page: 18 20 +18 19 bop 0 -83 a Ft(18)1722 b(T)1793 -73 y(E)1819 -83 +y(Xdra)o(w)62 158 y(A)12 b(P)o(ostScript)f(path)g(is)g(started)g(at)f +Fq(\(0)15 b(0\))c Ft(and)h(con)o(tin)o(ues)f(with)h(a)f(line)i(to)d +Fq(\(1)15 b(1\))p Ft(.)k(This)11 b(path)h(is)f(in)o(terrupted)0 +221 y(b)o(y)16 b(the)g(segmen)o(t.)22 b(The)17 b(\014lled)h(circle)f +(is)g(dra)o(wn)f(next.)22 b(After)16 b(the)g(segmen)o(t,)g(the)g(path)g +(con)o(tin)o(ues)g(and)h(is)f(not)0 283 y(strok)o(ed)i(un)o(til)h(the)f +Fq(\\move)d(\(0)g(0\))j Ft(command)g(after)f(the)i(end)g(of)e(the)i +(segmen)o(t.)28 b(This)19 b(means)f(that)g(the)g(line)0 +345 y(app)q(ears)d(on)g(top)g(of)g(the)g(\014lled)i(region.)62 +483 y(If)d(the)g(\014ll)h(op)q(eration)f(is)h(to)e(co)o(v)o(er)g(the)h +(line,)h(the)f(path)f(m)o(ust)h(b)q(e)g(strok)o(ed)f(b)q(efore)h(the)g +(\014ll)h(op)q(eration.)20 b(F)l(rom)0 545 y(T)25 555 +y(E)51 545 y(Xdra)o(w,)12 b(the)g(mo)o(v)o(e)g(commands)h +Fq(\\move)f Ft(and)h Fq(\\rmove)p Ft(,)f(and)h(the)f(end)i(T)1278 +555 y(E)1303 545 y(Xdra)o(w)e(command)h Fq(\\etexdraw)e +Ft(ter-)0 608 y(minate)i(a)f(path)h(and)g(cause)g(it)f(to)g(b)q(e)i +(strok)o(ed.)k(Within)c(a)e(segmen)o(t,)g(the)h(end)h(segmen)o(t)e +(command)g Fq(\\esegment)0 670 y Ft(also)17 b(terminates)g(and)g(strok) +o(es)f(a)h(path.)25 b(In)18 b(the)f(example)h(ab)q(o)o(v)o(e,)e(the)h +(line)i(can)e(b)q(e)h(strok)o(ed)e(b)o(y)h(inserting)h(a)0 +732 y(mo)o(v)o(e)13 b(command)g(\(suc)o(h)g(as)g(a)g +Fq(\\rmove)i(\(0)f(0\))g Ft(whic)o(h)g(do)q(es)f(not)g(a\013ect)g(the)h +(p)q(osition\),)g(b)q(efore)f(the)h(start)e(of)h(the)0 +795 y(segmen)o(t.)0 1029 y Fs(3.3)33 b(Sa)n(ving)16 b(p)r(ositions)62 +1167 y Ft(The)21 b Fq(\\savecurrpos)f Ft(command)h(sa)o(v)o(es)f(the)h +(curren)o(t)g(p)q(osition.)38 b(The)21 b(sa)o(v)o(ed)f(p)q(osition)i +(is)g(an)f(absolute)0 1229 y(p)q(osition,)16 b(not)f(one)g(relativ)o(e) +h(to)e(a)h(segmen)o(t.)20 b(The)15 b(p)q(osition)h(sa)o(ving)f(mec)o +(hanism)h(is)g(global;)f(the)h(p)q(osition)g(can)0 1291 +y(b)q(e)g(sa)o(v)o(ed)e(within)j(a)e(nested)g(segmen)o(t)g(and)g(then)h +(used)g(outside)f(of)g(the)g(segmen)o(t.)20 b(The)15 +b Fo(x)j Ft(and)e Fo(y)j Ft(co)q(ordinates)0 1354 y(of)g(the)h(p)q +(osition)h(are)f(sa)o(v)o(ed)f(separately)h(as)g(named)g(co)q +(ordinates.)34 b(The)20 b(names)g(are)f(of)h(the)g(form)f +Fq(*)p Fo(name)s Ft(,)0 1416 y(with)e(the)g(leading)h +Fq(*)e Ft(b)q(eing)i(obligatory)l(.)24 b(A)17 b(companion)g(command,)g +Fq(\\savepos)p Ft(,)e(sa)o(v)o(es)h(a)g(giv)o(en)i(co)q(ordinate)0 +1478 y(\(relativ)o(e)d(to)g(the)g(curren)o(t)g(segmen)o(t\))g(as)g(an)g +(absolute)g(sym)o(b)q(olic)i(p)q(osition.)0 1643 y Fq(\\savecurrpos)d +(\(*)p Fo(p)o(x)k Fq(*)p Fo(p)o(y)t Fq(\))240 1706 y +Ft(Sa)o(v)o(e)d(the)g(curren)o(t)g(p)q(osition)h(as)f(the)g(absolute)h +(p)q(osition)g(referenced)g(b)o(y)g Fq(\(*)p Fo(p)o(x)i +Fq(*)p Fo(p)o(y)t Fq(\))p Ft(.)0 1795 y Fq(\\savepos)c(\()p +Fo(x)k(y)t Fq(\)\(*)p Fo(p)o(x)g Fq(*)p Fo(p)o(y)t Fq(\))240 +1857 y Ft(Sa)o(v)o(e)d(the)h(co)q(ordinate)g(p)q(osition)h +Fq(\()p Fo(x)h(y)t Fq(\))d Ft(as)g(the)h(absolute)g(p)q(osition)h +(referenced)f(b)o(y)g Fq(\(*)p Fo(p)o(x)i Fq(*)p Fo(p)o(y)t +Fq(\))p Ft(.)240 1919 y(The)f(co)q(ordinate)g Fq(\()p +Fo(x)h(y)t Fq(\))f Ft(is)g(in)o(terpreted)g(in)h(the)f(normal)f +(fashion)h(as)g(a)f(co)q(ordinate)h(relativ)o(e)h(to)240 +1982 y(the)d(curren)o(t)g(segmen)o(t,)g(using)h(the)f(curren)o(t)g +(scaling)h(factors)e(and)i(dra)o(wing)f(unit.)62 2133 +y(The)21 b(sym)o(b)q(olic)g(names)g(used)g(to)e(sp)q(ecify)j(a)e(sa)o +(v)o(ed)g(p)q(osition)h(can)g(consist)f(of)g(an)o(y)g(c)o(haracters)g +(that)f(are)0 2196 y(not)f(sp)q(ecial)i(to)e(T)319 2205 +y(E)344 2196 y(X,)g(but)h(m)o(ust)f(start)f(with)h(a)g +Fq(*)h Ft(c)o(haracter.)28 b(The)19 b(sym)o(b)q(olic)g(names)f(can)h(b) +q(e)g(used)g(as)f(the)0 2258 y Fo(x)k Ft(and/or)d Fo(y)k +Ft(co)q(ordinate)c(in)h(an)o(y)f(command)g(that)g(needs)g(a)g(co)q +(ordinate.)32 b(Sym)o(b)q(olic)21 b(co)q(ordinates)f(are)e(not)0 +2320 y(normally)i(used)f(with)h(relativ)o(e)g(motion)f(commands)g(suc)o +(h)g(as)g Fq(\\rlvec)f Ft(or)h Fq(\\rmove)p Ft(.)31 b(If)19 +b(used)h(with)f(relativ)o(e)0 2382 y(motion,)c(the)g(corresp)q(onding)h +(displacemen)o(t)h(is)f(equal)f(to)g(the)g(sym)o(b)q(olic)i(co)q +(ordinate)e(v)m(alue.)62 2521 y(On)j(exit)f(from)f(a)h(segmen)o(t,)g +(the)g(p)q(osition)h(and)f(graphics)g(state)f(on)h(en)o(try)g(is)g +(restored.)25 b(An)o(y)17 b(c)o(hanges)g(to)0 2583 y(line)j(t)o(yp)q +(es,)e(scaling)h(and)f(p)q(osition)h(are)e(discarded.)29 +b(Ho)o(w)o(ev)o(er,)18 b(it)g(is)g(sometimes)g(useful)h(alter)f(the)g +(p)q(osition)0 2645 y(on)h(exit)g(from)f(a)g(segmen)o(t.)30 +b(The)19 b Fq(\\savepos)e Ft(command)i(allo)o(ws)f(for)g(the)h(sa)o +(ving)g(of)f(a)g(p)q(osition)i(within)g(the)p eop +%%Page: 19 21 +19 20 bop 0 -83 a Ft(Chapter)15 b(3:)k(Dra)o(wing)c(Segmen)o(ts)g(and)g +(Scaling)1061 b(19)0 158 y(segmen)o(t.)34 b(This)21 b(p)q(osition)g +(can)f(b)q(e)h(restored)f(after)f(the)h Fq(\\esegment)f +Ft(with)i(a)f Fq(\\move)f Ft(command)h(using)h(the)0 +221 y(sa)o(v)o(ed)16 b(sym)o(b)q(olic)h(p)q(osition.)24 +b(This)17 b(approac)o(h)e(can)i(b)q(e)f(used)h(to)f(build)i(mo)q(dules) +f(whic)o(h)g(op)q(erate)f(in)h(a)f(manner)0 283 y(analogous)f(to)f(the) +i(basic)g(relativ)o(e)f(motion)g(line)i(v)o(ector)e(commands.)62 +420 y(The)i(follo)o(wing)g(example)g(de\014nes)h(a)e(macro)g(whic)o(h)h +(dra)o(ws)f(a)g(b)q(o)o(x)g(0.75)g(inc)o(hes)h(wide)h(b)o(y)e(0.5)g +(inc)o(hes)h(high)0 482 y(con)o(taining)d(cen)o(tered)h(text.)j(On)d +(lea)o(ving)f(the)g(macro)f(the)g(p)q(osition)i(will)g(b)q(e)g(set)e +(at)g(a)g(p)q(oin)o(t)h(on)g(the)g(righ)o(thand)0 544 +y(side)i(of)f(the)g(b)q(o)o(x.)120 671 y Fq(\\def\\tbox)23 +b(#1{\\bsegment)478 723 y(\\lvec)g(\(0)h(+0.25\))94 b(\\lvec)24 +b(\(0.75)f(+0.25\))478 775 y(\\lvec)g(\(0.75)g(-0.25\))g(\\lvec)h(\(0)f +(-0.25\))g(\\lvec)g(\(0)h(0\))478 827 y(\\textref)f(h:C)g(v:C)h +(\\htext)f(\(0.375)g(0\){#1})478 879 y(\\savepos)g(\(0.75)g(0\)\(*ex)g +(*ey\))430 930 y(\\esegment)430 982 y(\\move)g(\(*ex)h(*ey\)})62 +1109 y Ft(With)12 b(this)f(de\014nition,)j(w)o(e)d(can)g(treat)f +Fq(\\tbox)g Ft(in)i(the)g(same)f(w)o(a)o(y)f(as)g(the)i(basic)g(v)o +(ector)e(commands,)h(stringing)0 1171 y(them)k(together)g(to)f(form)h +(a)f(blo)q(c)o(k)i(diagram)f(as)g(in)h(this)g(example.)120 +1298 y Fq(\\centertexdraw{)168 1350 y(\\ravec)23 b(\(1)g(0\))h +(\\tbox{$H\(z\)$})e(\\ravec)h(\(1)h(0\))120 1402 y(})563 +1618 y @beginspecial 0 @hoffset 18 @voffset @setspecial +%%BeginDocument: texdraw.ps9 +50 dict begin +/mv {stroke moveto} def +/lv {lineto} def +/st {currentpoint stroke moveto} def +/sl {st setlinewidth} def +/sd {st 0 setdash} def +/sg {st setgray} def +/bs {gsave} def /es {stroke grestore} def +/fl {gsave setgray fill grestore + currentpoint newpath moveto} def +/fp {gsave setgray fill grestore st} def +/cv {curveto} def +/cr {gsave currentpoint newpath 3 -1 roll 0 360 arc + stroke grestore} def +/fc {gsave setgray currentpoint newpath + 3 -1 roll 0 360 arc fill grestore} def +/ar {gsave currentpoint newpath 5 2 roll arc stroke grestore} def +/el {gsave /svm matrix currentmatrix def + currentpoint translate scale newpath 0 0 1 0 360 arc + svm setmatrix stroke grestore} def +/fe {gsave setgray currentpoint translate scale newpath + 0 0 1 0 360 arc fill grestore} def +/av {/hhwid exch 2 div def /hlen exch def + /ah exch def /tipy exch def /tipx exch def + currentpoint /taily exch def /tailx exch def + /dx tipx tailx sub def /dy tipy taily sub def + /alen dx dx mul dy dy mul add sqrt def + /blen alen hlen sub def + gsave tailx taily translate dy dx atan rotate + (V) ah ne {blen 0 gt {blen 0 lineto} if} {alen 0 lineto} ifelse + stroke blen hhwid neg moveto alen 0 lineto blen hhwid lineto + (T) ah eq {closepath} if + (W) ah eq {gsave 1 setgray fill grestore closepath} if + (F) ah eq {fill} {stroke} ifelse + grestore tipx tipy moveto} def +0.24 0.24 scale +1 setlinecap 1 setlinejoin +3 setlinewidth [] 0 setdash +0 0 moveto +300 0 (T) 48 24 av +bs +300 75 lv +525 75 lv +525 -75 lv +300 -75 lv +300 0 lv +es +525 0 mv +825 0 (T) 48 24 av +stroke end showpage +%%EndDocument + @endspecial 925 1555 a Fl(H)t Ft(\()p Fl(z)r Ft(\))0 +1839 y Fs(3.4)33 b(Scaling)16 b(co)r(ordinates)62 1976 +y Ft(There)i(are)g(t)o(w)o(o)f(scale)h(factors)f(a)o(v)m(ailable,)j +(the)e(unit)h(scale)f(factor)f(and)h(the)h(segmen)o(t)e(scale)i +(factor.)27 b(The)0 2038 y(o)o(v)o(erall)11 b(scale)g(factor)e(is)i +(the)g(pro)q(duct)g(of)f(these)h(t)o(w)o(o.)17 b(There)10 +b(are)h(absolute)g(and)f(relativ)o(e)h(v)o(ersions)g(of)f(commands)0 +2101 y(to)15 b(c)o(hange)g(these)g(scale)h(factors.)62 +2238 y(The)g(unit)g(scale)h(factor)d(is)i(normally)g(used)h(to)e +(a\013ect)f(global)j(scale)f(c)o(hanges.)21 b(Changes)15 +b(to)g(the)h(unit)g(scale)0 2300 y(factor)e(remains)i(lo)q(cal)g(to)f +(a)g(segmen)o(t,)f(but)h(propagate)f(to)h(inferior)h(segmen)o(ts.)j +(The)d(default)g(v)m(alue)g(is)g(unit)o(y)l(.)62 2437 +y(The)j(segmen)o(t)f(scale)h(factor)f(is)h(used)g(for)f(lo)q(cal)i +(scale)f(c)o(hanges.)30 b(It)18 b(remains)h(lo)q(cal)h(to)e(a)g(segmen) +o(t.)30 b(The)0 2499 y(segmen)o(t)15 b(scale)h(factor)f(is)h(reset)g +(to)f(unit)o(y)h(on)f(en)o(try)h(in)o(to)f(eac)o(h)h(segmen)o(t.)21 +b(This)16 b(means)f(that)g(c)o(hanges)h(to)f(the)0 2562 +y(segmen)o(t)g(scale)h(factor)e(do)h(not)g(propagate)f(to)h(inferior)h +(segmen)o(ts.)p eop +%%Page: 20 22 +20 21 bop 0 -83 a Ft(20)1722 b(T)1793 -73 y(E)1819 -83 +y(Xdra)o(w)0 158 y Fq(\\setunitscale)13 b Fo(scale)240 +221 y Ft(Set)f(the)h(unit)g(scaling)g(to)e Fo(scale)p +Ft(.)20 b(The)12 b(argumen)o(t)g Fo(scale)j Ft(is)e(a)f(real)h(n)o(um)o +(b)q(er)f(whic)o(h)h(is)g(used)g(to)e(scale)240 283 y(co)q(ordinate)j +(v)m(alues.)21 b(The)14 b(o)o(v)o(erall)g(scaling)h(factor)e(is)h(the)g +(pro)q(duct)g(of)g(the)g(unit)g(scale)h(factor)e(and)240 +345 y(the)i(segmen)o(t)g(scale)h(factor.)0 441 y Fq(\\relunitscale)d +Fo(v)m(alue)240 503 y Ft(Adjust)h(the)g(unit)g(scale)h(factor)e(b)o(y)g +(m)o(ultiplying)j(b)o(y)e Fo(v)m(alue)p Ft(.)21 b(This)14 +b(has)g(the)g(e\013ect)f(of)h(m)o(ultiplying)240 566 +y(the)h(o)o(v)o(erall)g(scale)g(factor)f(b)o(y)h(the)g(same)f(factor.) +19 b(The)c(o)o(v)o(erall)g(scaling)h(factor)e(is)h(the)g(pro)q(duct)g +(of)240 628 y(the)g(unit)h(scale)g(factor)e(and)i(the)f(segmen)o(t)g +(scale)h(factor.)0 724 y Fq(\\setsegscale)e Fo(scale)240 +786 y Ft(Set)19 b(the)f(segmen)o(t)g(scale)h(factor.)29 +b(The)18 b(argumen)o(t)g Fo(scale)k Ft(is)d(a)f(real)h(n)o(um)o(b)q(er) +f(whic)o(h)i(is)f(used)g(to)240 849 y(scale)d(co)q(ordinate)g(v)m +(alues.)21 b(The)16 b(o)o(v)o(erall)f(scale)h(factor)f(is)g(the)h(pro)q +(duct)g(of)e(the)i(unit)g(scale)g(factor)240 911 y(and)f(the)h(segmen)o +(t)e(scale)i(factor.)0 1007 y Fq(\\relsegscale)e Fo(v)m(alue)240 +1069 y Ft(Adjust)i(the)g(segmen)o(t)f(scale)h(factor)f(b)o(y)h(m)o +(ultiplying)i(b)o(y)e Fo(v)m(alue)p Ft(.)22 b(This)17 +b(has)e(the)h(e\013ect)g(of)f(m)o(ulti-)240 1131 y(plying)i(the)e +(curren)o(t)g(o)o(v)o(erall)g(scale)h(factor)e(b)o(y)h(the)h(same)e +(factor.)19 b(The)d(o)o(v)o(erall)f(scaling)h(factor)e(is)240 +1194 y(the)h(pro)q(duct)h(of)f(the)g(unit)h(scale)g(factor)e(and)h(the) +h(segmen)o(t)e(scale)i(factor.)62 1352 y(In)e(addition)f(to)f(the)h +(unit)g(scale)h(factor)d(and)i(the)g(segmen)o(t)f(scale)h(factor,)f +(the)h(scaling)h(can)e(b)q(e)i(con)o(trolled)f(b)o(y)0 +1414 y(the)f(c)o(hoice)h(of)f(dra)o(wing)g(units)h(with)g(the)f +(command)g Fq(\\drawdim)f Ft(\(see)i(Section)g(2.4)e([Co)q(ordinate)h +(sp)q(eci\014cation],)0 1476 y(page)j(6\).)0 1635 y Fq(\\drawdim)f(cm)h +(\\setunitscale)e(2.54)240 1697 y Ft(Set)k(the)g(units)h(to)f(cen)o +(timetres)g(scaled)h(b)o(y)f(2.54.)24 b(T)l(ogether)17 +b(these)g(commands)g(are)g(e\013ectiv)o(ely)240 1759 +y(the)e(same)g(as)g Fq(\\drawdim)f(in)p Ft(.)62 1918 +y(The)k(segmen)o(t)g(scale)h(can)f(b)q(e)g(used)h(to)e(allo)o(w)h +(scale)h(c)o(hanges)f(in)h(segmen)o(ts)e(so)h(that)f(v)m(alues)i(are)f +(in)g(more)0 1980 y(con)o(v)o(enien)o(t)g(units.)28 b(F)l(or)18 +b(example)g(supp)q(ose)h(dimensions)g(in)g(a)e(segmen)o(t)g(are)h(m)o +(ultiples)h(of)f(one)f(third)i(of)e(an)0 2042 y(inc)o(h.)26 +b(The)18 b(segmen)o(t)e(scale)i(can)f(b)q(e)h(set)f(once)g(to)g(mak)o +(e)f(1)h(dra)o(wing)g(unit)h(equal)f(0.3333)f(inc)o(hes.)26 +b(F)l(rom)17 b(that)0 2104 y(p)q(oin)o(t)f(on,)e(co)q(ordinates)i(can)f +(b)q(e)h(sp)q(eci\014ed)i(with)d(in)o(teger)g(v)m(alues.)62 +2246 y(The)g(follo)o(wing)f(example)h(de\014nes)h(a)d(macro)h(to)f(dra) +o(w)h(a)g(rectangular)g(b)q(o)o(x)g(whic)o(h)h(is)f(t)o(wice)h(as)e +(wide)i(as)f(it)g(is)0 2308 y(high.)21 b(The)15 b(width)h(is)g(sp)q +(eci\014ed)h(as)e(an)g(argumen)o(t.)120 2439 y Fq(\\def\\mybox)22 +b(#1{\\bsegment)502 2491 y(\\setsegscale)g(#1)502 2543 +y(\\lvec)h(\(0)h(+0.25\))f(\\lvec)g(\(1)g(+0.25\))g(\\lvec)h(\(1)f +(-0.25\))502 2595 y(\\lvec)g(\(0)h(-0.25\))f(\\lvec)g(\(0)g(0\))454 +2647 y(\\esegment})p eop +%%Page: 21 23 +21 22 bop 0 -83 a Ft(Chapter)15 b(3:)k(Dra)o(wing)c(Segmen)o(ts)g(and)g +(Scaling)1061 b(21)0 158 y Fs(3.5)33 b(Dra)n(wing)15 +b(size)62 295 y Ft(The)i(e\013ectiv)o(e)g(size)g(of)f(the)h(dra)o(wing) +f(is)h(determined)h(b)o(y)e(the)g(maxim)o(um)h(excursions)g(of)f(the)h +(co)q(ordinates)0 358 y(supplied)22 b(to)d(T)269 367 +y(E)295 358 y(Xdra)o(w)g(commands.)33 b(The)20 b(minim)o(um)h(and)f +(maxim)o(um)f(scaled)i Fo(x)i Ft(and)d Fo(y)j Ft(co)q(ordinates)d(are)0 +420 y(tallied.)28 b(Note)17 b(that)g Fq(\\move)f Ft(commands)h(con)o +(tribute)h(to)f(the)g(determination)i(of)d(the)i(calculated)h(size)f +(of)f(the)0 482 y(dra)o(wing,)h(ev)o(en)g(though)f(they)h(do)g(not)f +(generate)h(visible)i(lines.)29 b(The)18 b(circle)h(and)f(ellipse)i +(commands)d(add)h(a)0 544 y(comp)q(ensation)g(for)e(the)h(radii)h(of)f +(circles)h(and)g(ellipses.)27 b(The)17 b(\014nal)h(T)1231 +554 y(E)1257 544 y(Xdra)o(w)e(dra)o(wing)h(is)h(placed)g(in)g(a)e(T) +1890 554 y(E)1916 544 y(X)0 607 y(b)q(o)o(x)k(with)g(lo)o(w)o(er)g +(lefthand)g(corner)g(corresp)q(onding)h(to)e Fq(\()p +Fo(x)p Ft(-min)i Fo(y)p Ft(-min)p Fq(\))g Ft(and)f(upp)q(er)h(righ)o +(thand)f(corner)g(at)0 669 y Fq(\()p Fo(x)p Ft(-max)15 +b Fo(y)p Ft(-max)p Fq(\))p Ft(.)62 806 y(T)l(ext)k(generated)f(b)o(y)g +Fq(\\htext)p Ft(,)h Fq(\\vtext)e Ft(or)h Fq(\\rtext)g +Ft(can)g(spill)j(outside)e(the)f(b)q(o)o(x)h(as)f(determined)i(ab)q(o)o +(v)o(e.)0 868 y(Only)e(the)f(text)f(reference)i(p)q(oin)o(t)f(is)h +(guaran)o(teed)e(to)g(b)q(e)i(in)f(the)g(dra)o(wing)g(b)q(o)o(x.)25 +b(Arcs)17 b(can)g(also)f(spill)j(outside)0 930 y(the)d(dra)o(wing)f(b)q +(o)o(x.)22 b(Note)15 b(also)h(that)f(the)g(widths)i(of)e(lines,)i(and)f +(the)g(sizes)g(of)f(arro)o(wheads)g(do)h(not)f(a\013ect)g(the)0 +993 y(size)h(of)f(the)h(dra)o(wing.)k(The)c(calculated)h(size)f(of)f +(the)g(dra)o(wing)h(will)h(nev)o(er)e(b)q(e)h(larger)g(than)f(the)g +(actual)h(size)g(of)0 1055 y(the)h(dra)o(wing.)23 b(In)18 +b(extreme)e(cases)h(in)g(whic)o(h)g(text)f(or)g(lines)j(extend)e(far)f +(outside)h(the)f(dra)o(wing,)h(extra)f Fq(\\move)0 1117 +y Ft(commands)h(should)h(b)q(e)f(used)h(to)e(establish)i(the)g(size)f +(of)g(the)g(dra)o(wing)g(so)g(that)f(the)h(T)1528 1127 +y(E)1553 1117 y(Xdra)o(w)g(b)q(o)o(x)g(includes)0 1180 +y(all)f(of)f(the)g(dra)o(wing.)62 1316 y(T)87 1326 y(E)113 +1316 y(Xdra)o(w)e(pro)o(vides)h(the)f Fq(\\drawbb)g Ft(command)h(to)e +(dra)o(w)h(a)h(b)q(o)o(x)f(whic)o(h)i(indicates)g(the)e(e\013ectiv)o(e) +h(size)h(of)e(the)0 1379 y(dra)o(wing.)26 b(Whenev)o(er)17 +b Fq(\\drawbb)f Ft(is)i(in)o(v)o(ok)o(ed,)f(a)g(ruled)h(b)q(o)o(x)f(is) +h(dra)o(wn)e(around)i(the)f(dra)o(wing)g(as)f(it)i(has)f(b)q(een)0 +1441 y(sized)h(up)f(to)e(that)h(p)q(oin)o(t.)24 b(Normally)17 +b Fq(\\drawbb)f Ft(is)h(in)o(v)o(ok)o(ed)f(just)h(b)q(efore)f(the)h +(end)g(of)f(a)g(dra)o(wing)h(to)e(indicate)0 1503 y(the)g(e\013ectiv)o +(e)h(size)g(of)f(the)g(\014nal)h(dra)o(wing.)0 1665 y +Fq(\\drawbb)72 b Ft(Dra)o(w)16 b(a)i(ruled)h(b)q(o)o(x)e(around)h(the)g +(e\013ectiv)o(e)g(size)h(of)e(a)g(dra)o(wing)h(pro)q(duced)h(b)o(y)e(T) +1679 1675 y(E)1705 1665 y(Xdra)o(w)g(com-)240 1727 y(mands.)0 +1952 y Fs(3.6)33 b(Initial)17 b(curren)n(t)g(p)r(osition)62 +2089 y Ft(The)c(\014rst)g(op)q(eration)g(in)h(a)e(dra)o(wing)h(should)h +(b)q(e)g(a)e(mo)o(v)o(e)h(to)f(establish)i(the)f(curren)o(t)g(p)q +(osition.)20 b(The)13 b(curren)o(t)0 2151 y(p)q(osition)19 +b(can)f(b)q(e)h(established)g(explicitly)i(through)d(a)g +Fq(\\move)f Ft(command)h(or)f(a)h(text)f(p)q(ositioning)j(command)0 +2213 y(suc)o(h)f(as)g Fq(\\htext)f Ft(with)i(a)f(co)q(ordinate.)32 +b(Ho)o(w)o(ev)o(er,)19 b(if)g(an)g(attempt)f(is)i(made)f(to)g(use)g(a)g +(dra)o(wing)g(command)0 2275 y(whic)o(h)e(needs)g(a)e(curren)o(t)h(p)q +(osition)i(and)e(none)g(has)g(b)q(een)h(established,)h(T)1288 +2285 y(E)1313 2275 y(Xdra)o(w)e(implicitly)j(sets)d(the)g(initial)0 +2338 y(curren)o(t)c(p)q(osition)h(to)e Fq(\(0)k(0\))p +Ft(.)k(The)12 b(size)h(of)e(the)h(T)841 2347 y(E)867 +2338 y(Xdra)o(w)f(\014gure)h(is)h(normally)f(determined)i(from)d(the)h +(sequence)0 2400 y(of)h(co)q(ordinates)h(sp)q(eci\014ed,)i(but)e(will)i +(include)g(the)d(implicit)k(initial)f(p)q(osition)e(in)h(case)f +(another)f(initial)j(p)q(osition)0 2462 y(has)f(not)g(b)q(een)h +(explicitly)i(sp)q(eci\014ed.)p eop +%%Page: 22 24 +22 23 bop 0 -83 a Ft(22)1722 b(T)1793 -73 y(E)1819 -83 +y(Xdra)o(w)p eop +%%Page: 23 25 +23 24 bop 0 -83 a Ft(Chapter)15 b(4:)k(Using)d(T)385 +-73 y(E)411 -83 y(Xdra)o(w)e(with)i(LaT)737 -73 y(E)762 +-83 y(X)1109 b(23)0 158 y Fp(4)41 b(Using)14 b(T)340 +174 y(E)383 158 y(Xdra)n(w)h(with)g(LaT)934 174 y(E)977 +158 y(X)62 346 y Ft(The)21 b(LaT)237 356 y(E)263 346 +y(X)f(t)o(yp)q(esetting)h(system)f(uses)g(a)h(structured)f(approac)o(h) +g(to)g(declaring)i(t)o(yp)q(esetting)e(en)o(viron-)0 +408 y(men)o(ts.)27 b(F)l(or)17 b(LaT)318 418 y(E)344 +408 y(X2e,)h(the)g Fq(texdraw)f Ft(pac)o(k)m(age)g(de\014nes)i(the)f +Fq(texdraw)f Ft(en)o(vironmen)o(t.)28 b(The)18 b(T)1715 +418 y(E)1740 408 y(Xdra)o(w)f(en-)0 470 y(vironmen)o(t)g(is)f(started)g +(with)h(a)f Fq(\\begin{texdraw})e Ft(command)i(and)h(terminated)g(with) +f(an)h Fq(\\end{texdraw})0 533 y Ft(command.)j(All)c(of)f(the)g(basic)h +(T)568 542 y(E)594 533 y(Xdra)o(w)e(commands)h(can)h(b)q(e)f(used)h +(within)h(the)e Fq(texdraw)f Ft(en)o(vironmen)o(t.)62 +670 y(As)h(an)h(example,)f(a)g(LaT)497 679 y(E)523 670 +y(X2e)g(v)m(arian)o(t)g(of)g(an)g(earlier)h(example)g(can)f(b)q(e)h +(constructed)g(as)e(follo)o(ws.)120 796 y Fq(\\documentclass{article}) +120 848 y(\\usepackage{texdraw})144 900 y(...)120 952 +y(\\begin{document})144 1004 y(...)120 1056 y +(\\newcommand{\\tbox}[1]{\045)192 1108 y(\\bsegment)239 +1160 y(\\lvec)23 b(\(0)h(+0.25\))95 b(\\lvec)23 b(\(0.75)g(+0.25\))239 +1212 y(\\lvec)g(\(0.75)h(-0.25\))f(\\lvec)g(\(0)g(-0.25\))h(\\lvec)f +(\(0)g(0\))239 1263 y(\\textref)g(h:C)h(v:C)f(\\htext)g(\(0.375)g +(0\){#1})239 1315 y(\\savepos)g(\(0.75)g(0\)\(*ex)g(*ey\))192 +1367 y(\\esegment)192 1419 y(\\move)g(\(*ex)g(*ey\)})120 +1471 y(\\begin{center})120 1523 y(\\begin{texdraw})168 +1575 y(\\ravec)g(\(1)g(0\))h(\\tbox{$H\(z\)$})e(\\ravec)h(\(1)h(0\))120 +1627 y(\\end{texdraw})120 1679 y(\\end{center})144 1730 +y(...)120 1782 y(\\end{document})62 1909 y Ft(This)17 +b(example)f(illustrates)h(the)f(use)g(of)f(the)h(LaT)921 +1919 y(E)947 1909 y(X)g(command)f Fq(\\newcommand)g Ft(as)g(an)h +(alternativ)o(e)g(to)f(the)0 1971 y(plain)21 b(T)143 +1981 y(E)169 1971 y(X)f(command)f Fq(\\def)p Ft(.)34 +b(Instead)20 b(of)f(the)h(basic)h(T)1025 1981 y(E)1050 +1971 y(Xdra)o(w)f(command)f Fq(\\centertexdraw)p Ft(,)g(a)g(nested)0 +2034 y(com)o(bination)d(of)f(the)g(LaT)465 2043 y(E)491 +2034 y(X)g(cen)o(tering)h(en)o(vironmen)o(t)f(and)g(the)h(T)1189 +2043 y(E)1214 2034 y(Xdra)o(w)f(en)o(vironmen)o(t)g(is)h(used.)0 +2259 y Fs(4.1)33 b(P)n(ostScript)16 b(prin)n(ter)h(driv)n(ers)62 +2396 y Ft(The)24 b Fq(texdraw)f Ft(pac)o(k)m(age)h(uses)g(the)g(prin)o +(ter)h(driv)o(er)f(in)o(terface)g(pro)o(vided)h(b)o(y)f(the)g(standard) +f(LaT)1847 2406 y(E)1873 2396 y(X2e)0 2458 y Fq(graphics)d +Ft(pac)o(k)m(age.)37 b(An)o(y)22 b(options)f(to)f(the)h +Fq(texdraw)g Ft(pac)o(k)m(age)g(are)f(passed)i(to)e(the)h +Fq(graphics)f Ft(pac)o(k)m(age.)0 2521 y(Sp)q(eci\014cally)l(,)25 +b(the)20 b(name)h(of)f(the)h(P)o(ostScript)f(driv)o(er)h(to)f(b)q(e)h +(used)g(can)g(b)q(e)g(sp)q(eci\014ed)i(as)d(an)g(option)h(to)f(the)0 +2583 y Fq(texdraw)13 b Ft(pac)o(k)m(age.)20 b(With)14 +b(no)g(explicit)i(prin)o(ter)e(driv)o(er)h(option,)f(the)g(default)h +(prin)o(ter)f(driv)o(er)g(asso)q(ciated)h(with)0 2645 +y(the)g Fq(graphics)f Ft(pac)o(k)m(age)i(is)f(used.)p +eop +%%Page: 24 26 +24 25 bop 0 -83 a Ft(24)1722 b(T)1793 -73 y(E)1819 -83 +y(Xdra)o(w)62 158 y(The)18 b Fq(texdraw)e Ft(pac)o(k)m(age)h(can)g(b)q +(e)h(used)f(with)h(an)o(y)f(of)f(the)h(prin)o(ter)h(driv)o(ers)f(supp)q +(orted)h(b)o(y)f(the)g Fq(graphics)0 221 y Ft(pac)o(k)m(age)k(that)g +(allo)o(w)g(for)g(the)g(imp)q(ortation)h(of)f(P)o(ostScript)g(graphics) +g(\014les,)j(viz.,)f Fq(dvips)p Ft(,)e Fq(xdvi)p Ft(,)h +Fq(dvi2ps)p Ft(,)0 283 y Fq(dvialw)p Ft(,)j Fq(dvilaser)p +Ft(,)g Fq(dvipsone)p Ft(,)f Fq(dviwindo)p Ft(,)h Fq(dvitops)p +Ft(,)g Fq(oztex)p Ft(,)g Fq(psprint)p Ft(,)g Fq(textures)p +Ft(,)g Fq(pctexps)p Ft(,)g(and)0 345 y Fq(pctexwin)p +Ft(.)g(Not)17 b(all)h(of)f(these)h(driv)o(ers)f(supp)q(ort)h(the)f +(text)g(rotation)f(needed)j(for)e(the)g(T)1566 355 y(E)1591 +345 y(Xdra)o(w)g(commands)0 407 y Fq(\\vtext)d Ft(and)i +Fq(\\rtext)p Ft(.)j(Of)c(the)g(driv)o(ers)h(listed)g(ab)q(o)o(v)o(e,)e +(only)i(the)f(follo)o(wing)h(supp)q(ort)f(supp)q(ort)h(text)e +(rotation:)0 470 y Fq(dvips)p Ft(,)g Fq(xdvi)p Ft(,)g +Fq(dvi2ps)p Ft(,)g Fq(dvitops)p Ft(,)g Fq(textures)p +Ft(,)g(and)h Fq(pctexps)p Ft(.)p eop +%%Page: 25 27 +25 26 bop 0 -83 a Ft(Chapter)15 b(5:)k(More)c(Details)1417 +b(25)0 158 y Fp(5)41 b(More)15 b(Details)62 372 y Ft(The)h(\014rst)f +(part)f(of)h(this)h(c)o(hapter)f(o\013ers)f(some)h(suggestions)h(for)e +(strategies)h(to)g(isolate)g(errors)g(in)h(T)1802 382 +y(E)1827 372 y(X)g(and)0 434 y(T)25 444 y(E)51 434 y(Xdra)o(w)f(input.) +22 b(The)16 b(second)g(part)f(of)g(this)h(c)o(hapter)g(discusses)h +(implemen)o(tational)g(issues.)22 b(An)16 b(a)o(w)o(areness)0 +496 y(of)f(these)g(issues)h(is)g(useful)g(if)g(T)538 +506 y(E)563 496 y(Xdra)o(w)f(is)h(to)e(b)q(e)i(extended.)0 +768 y Fs(5.1)33 b(Errors)15 b(while)i(using)e(T)695 782 +y(E)731 768 y(Xdra)n(w)62 911 y Ft(T)87 920 y(E)113 911 +y(X)j(input)g(is)g(notoriously)g(di\016cult)i(to)d(debug.)28 +b(If)18 b(T)1035 920 y(E)1060 911 y(X)g(rep)q(orts)f(errors,)h(so)f(m)o +(uc)o(h)h(the)f(b)q(etter.)28 b(If)18 b(the)0 973 y(cause)i(is)h(not)e +(immediately)j(ob)o(vious,)e(consider)h(using)g(a)e(binary)i(searc)o(h) +f(strategy)l(,)f(remo)o(ving)h(sections)g(of)0 1035 y(co)q(de)f(with)g +(the)f(premature)g(insertion)i(of)e(the)g Fq(\\bye)g +Ft(\(or)g Fq(\\end{document})e Ft(for)i(LaT)1538 1045 +y(E)1564 1035 y(X\))g(command)g(\(with)0 1097 y(the)e(appropriate)f +(closing)i(of)e(an)o(y)g(op)q(en)h(groups)f(and)h(the)f(lik)o(e\).)22 +b(Other)16 b(strategies)e(include)k(the)e(insertion)g(of)0 +1160 y Fq(\\message{I)e(am)h(here})h Ft(at)g(appropriate)g(places.)25 +b(T)l(ry)17 b(using)g Fq(\\tracingmacros=1)p Ft(.)22 +b(Man)o(y)16 b(problems)h(turn)0 1222 y(out)11 b(to)g(b)q(e)h(due)h(to) +e(an)g(incorrect)h(n)o(um)o(b)q(er)g(of)f(macro)g(argumen)o(ts)g(or)g +(incorrectly)h(delimited)i(macro)d(argumen)o(ts.)0 1284 +y(The)16 b Fq(\\tracingmacros=1)d Ft(option)i(writes)h(the)f(macro)g +(argumen)o(ts)f(and)i(macro)f(expansions)h(to)f(the)g(T)1817 +1294 y(E)1843 1284 y(X)g(log)0 1346 y(\014le.)62 1489 +y(Certain)20 b(errors)e(ma)o(y)h(not)g(manifest)h(themselv)o(es)g(un)o +(til)g(w)o(ell)h(after)d(the)i(o\013ending)g(command.)32 +b(F)l(or)19 b(in-)0 1551 y(stance,)14 b(if)i(a)e(closing)i(paren)o +(thesis)f(is)g(missing)h(from)e(a)g(T)991 1561 y(E)1017 +1551 y(Xdra)o(w)g(co)q(ordinate,)h(T)1424 1561 y(E)1449 +1551 y(X)g(con)o(tin)o(ues)g(searc)o(hing)h(for)0 1613 +y(the)j(paren)o(thesis.)30 b(If)19 b(one)g(is)g(found,)h(p)q(erhaps)f +(man)o(y)f(lines)i(later,)g(the)e(T)1314 1623 y(E)1340 +1613 y(Xdra)o(w)g(error)g(message)g Fq(invalid)0 1676 +y(coordinate)c Ft(will)j(b)q(e)f(prin)o(ted)f(at)g(this)h(later)f(p)q +(oin)o(t.)62 1818 y(All)h(input)g(in)g(the)f(T)413 1828 +y(E)438 1818 y(Xdra)o(w)g(en)o(vironmen)o(t)g(should)h(b)q(e)f(in)o +(tended)h(for)f(in)o(terpretation)g(b)o(y)f(T)1682 1828 +y(E)1708 1818 y(Xdra)o(w)g(com-)0 1880 y(mands.)41 b(T)208 +1890 y(E)234 1880 y(Xdra)o(w)22 b(places)h(text)f(inside)i(a)e(zero)g +(size)i(b)q(o)o(x)e(\(the)g(text)g(itself)h(extends)g(outside)g(the)g +(b)q(o)o(x\).)0 1942 y(Extraneous)15 b(input)j(manifests)e(itself)h(as) +e(a)h(non-zero)g(size)h(T)1068 1952 y(E)1094 1942 y(Xdra)o(w)e(text)h +(b)q(o)o(x.)22 b(This)17 b(causes)f(the)g(T)1793 1952 +y(E)1819 1942 y(Xdra)o(w)0 2005 y(text)e(and)h(the)g(P)o(ostScript)f +(graphics)i(to)e(b)q(e)h(displaced)i(from)d(one)g(another.)20 +b(An)15 b(error)f(message)g(is)h(issued)h(if)f(a)0 2067 +y(non-zero)i(width)g(T)341 2077 y(E)367 2067 y(Xdra)o(w)e(text)i(b)q(o) +o(x)f(is)h(detected.)25 b(If)17 b(this)g(error)e(message)i(app)q(ears,) +f(lo)q(ok)h(for)f(unin)o(tended)0 2129 y(c)o(haracter)e(sequences)j +(amongst)d(the)h(commands)g(to)g(T)971 2139 y(E)996 2129 +y(Xdra)o(w.)62 2271 y(Sev)o(eral)20 b(T)248 2281 y(E)274 +2271 y(Xdra)o(w)f(commands)h(pass)f(their)h(argumen)o(ts)f(\\ra)o(w")f +(to)h(the)h(P)o(ostScript)g(\014le.)34 b(That)19 b(means)0 +2334 y(that)14 b(in)o(v)m(alid)j(argumen)o(ts)d(can)h(generate)g(P)o +(ostScript)f(errors)h(when)g(the)g(do)q(cumen)o(t)g(is)g(prin)o(ted.)21 +b(F)l(or)14 b(instance)0 2396 y(the)j(argumen)o(t)f(of)h(the)g +Fq(\\setgray)e Ft(command)i(is)h(passed)f(straigh)o(t)f(through)g(to)h +(the)g(P)o(ostScript)f(\014le.)26 b(If)18 b(this)0 2458 +y(argumen)o(t)j(is)i(non-n)o(umeric,)i(a)c(P)o(ostScript)h(error)f +(results.)41 b(Not)22 b(all)h(P)o(ostScript)f(prin)o(ters)g(rep)q(ort)g +(errors)0 2521 y(bac)o(k)c(to)g(the)g(user.)30 b(The)18 +b(prin)o(t)h(ma)o(y)e(just)h(stop)g(prematurely)l(.)30 +b(One)19 b(approac)o(h)f(to)g(debugging)h(is)g(to)f(use)g(a)0 +2583 y(P)o(ostScript)13 b(preview)o(er)g(on)g(a)g(w)o(orkstation.)18 +b(That)12 b(w)o(a)o(y)l(,)h(one)g(can)g(determine)h(at)f(whic)o(h)h(p)q +(oin)o(t)f(in)h(the)f(dra)o(wing)0 2645 y(the)i(P)o(ostScript)g(error)g +(o)q(ccurs.)p eop +%%Page: 26 28 +26 27 bop 0 -83 a Ft(26)1722 b(T)1793 -73 y(E)1819 -83 +y(Xdra)o(w)0 158 y Fs(5.2)33 b(Extending)17 b(T)472 172 +y(E)507 158 y(Xdra)n(w)62 314 y Ft(T)87 323 y(E)113 314 +y(Xdra)o(w)i(is)h(implemen)o(ted)h(using)g(a)e(com)o(bination)h(of)g(T) +1098 323 y(E)1123 314 y(X)g(commands)f(and)h(P)o(ostScript)g(co)q(de.) +33 b(This)0 376 y(section)16 b(discusses)g(some)f(of)g(the)g(implemen)o +(tational)i(issues)f(as)f(they)g(relate)g(to)g(extending)h(T)1646 +386 y(E)1672 376 y(Xdra)o(w.)62 531 y(T)87 541 y(E)113 +531 y(Xdra)o(w)e(as)g(implemen)o(ted,)i(o\013ers)d(a)h(basic)h(set)g +(of)f(dra)o(wing)g(features.)19 b(These)c(are)f(adequate)h(for)f +(certain)0 593 y(tasks)h(suc)o(h)h(as)f(pro)q(ducing)i(blo)q(c)o(k)g +(diagrams.)k(There)16 b(are)f(di\013eren)o(t)h(approac)o(hes)g(to)f +(extending)i(T)1737 603 y(E)1762 593 y(Xdra)o(w)f(to)0 +656 y(include)h(other)e(functions.)20 b(In)15 b(some)g(cases,)f(the)h +(desired)h(functionalit)o(y)g(can)f(b)q(e)g(ac)o(hiev)o(ed)h(b)o(y)f +(writing)g(a)f(T)1890 665 y(E)1916 656 y(X)0 718 y(macro)h(whic)o(h)h +(builds)h(on)f(top)f(of)g(the)g(existing)i(T)870 728 +y(E)895 718 y(Xdra)o(w)e(commands.)20 b(As)c(these)f(extensions)h(b)q +(ecome)g(more)0 780 y(complex,)22 b(the)f(limitations)g(of)f(T)595 +790 y(E)621 780 y(X)g(for)g(computations)g(b)q(ecome)h(increasingly)h +(eviden)o(t.)36 b(In)21 b(other)f(cases,)0 842 y(access)d(to)g +(di\013eren)o(t)g(features)g(of)g(P)o(ostScript)g(is)h(desired.)27 +b(The)18 b(appropriate)f(approac)o(h)g(w)o(ould)g(b)q(e)h(to)f(write)0 +905 y(new)e(P)o(ostScript)g(pro)q(cedures)h(whic)o(h)g(can)g(b)q(e)g +(accessed)f(b)o(y)h(T)1088 915 y(E)1113 905 y(X)f(macros.)62 +1060 y(Included)i(with)d(T)374 1070 y(E)399 1060 y(Xdra)o(w)g(is)g(a)g +(set)f(of)h(macros)f(for)g(directly)i(accessing)g(P)o(ostScript)f +(functions.)20 b(These)14 b(are)0 1122 y(describ)q(ed)j(in)f(an)f(app)q +(endix)i(\(see)e(App)q(endix)j(A)d([P)o(ostScript)g(Commands],)e(page)j +(31\).)62 1278 y(T)87 1287 y(E)113 1278 y(Xdra)o(w)9 +b(also)i(comes)f(with)g(a)g(to)q(olb)q(o)o(x)g(of)g(routines)h(for)e +(handling)j(m)o(uc)o(h)e(of)g(the)h(user)f(in)o(terface,)h(con)o(v)o +(erting)0 1340 y(b)q(et)o(w)o(een)j(di\013eren)o(t)g(co)q(ordinate)g +(represen)o(tations)g(and)g(the)g(lik)o(e.)20 b(The)14 +b(macros)f(for)g(co)q(ordinate)i(deco)q(ding)g(and)0 +1402 y(for)i(computations)h(in)o(v)o(olving)h(co)q(ordinates)f(are)f +(describ)q(ed)j(in)e(an)g(app)q(endix)h(\(see)f(App)q(endix)i(B)d([T) +1793 1412 y(E)1819 1402 y(Xdra)o(w)0 1464 y(T)l(o)q(olb)q(o)o(x],)e +(page)g(35\).)0 1836 y Fj(5.2.1)30 b(Scaling)62 1992 +y Ft(The)17 b(scaling)h(commands)f(pro)o(vided)h(in)g(T)804 +2001 y(E)829 1992 y(Xdra)o(w)e(are)h(designed)h(to)f(a\013ect)f(only)h +(the)g(co)q(ordinate)h(v)m(alues)0 2054 y(sp)q(eci\014ed)c(in)f +(commands.)19 b(F)l(or)11 b(instance,)i(c)o(hanging)f(the)g +Fq(\\setunitscale)f Ft(v)m(alue)i(c)o(hanges)f(the)g(in)o(terpretation) +0 2116 y(of)k(the)h(co)q(ordinate)g(in)g(an)g Fq(\\avec)d(\()p +Fo(x)k(y)t Fq(\))f Ft(command,)f(but)h(do)q(es)g(not)f(c)o(hange)h(the) +f(line)j(width)e(or)f(arro)o(whead)0 2178 y(sizes)j(in)f(e\013ect.)28 +b(None)18 b(of)g(the)g(T)589 2188 y(E)614 2178 y(Xdra)o(w)f(scaling)i +(commands)f(a\013ect)f(the)h(size)h(of)e(T)1517 2188 +y(E)1543 2178 y(X)h(text)f(pro)q(duced)i(b)o(y)l(,)0 +2241 y(for)f(instance,)h(the)f Fq(\\htext)g Ft(command.)29 +b(Scale)19 b(c)o(hanges)f(will)i(ho)o(w)o(ev)o(er)d(a\013ect)h(the)g(p) +q(ositioning)i(of)e(text)g(for)0 2303 y(subsequen)o(t)e(commands.)62 +2458 y(The)c(line)i(parameters)d(are)h(c)o(hanged)g(only)h(if)f(the)g +(corresp)q(onding)h(commands)f(to)f(c)o(hange)i(them)f(are)f(issued.)0 +2521 y(If)h(the)g Fq(\\linewd)e Ft(command)i(is)g(giv)o(en,)g(the)g +(curren)o(t)f(co)q(ordinate)h(scaling)h(is)f(used)g(to)f(determine)i +(the)e(line)j(width.)0 2583 y(T)l(o)k(ac)o(hiev)o(e)g(a)g(b)q(eha)o +(viour)h(more)e(lik)o(e)i(a)f(global)h(scaling,)g(whenev)o(er)f(the)h +(scale)f(factor)f(is)i(c)o(hanged,)f(the)g(line)0 2645 +y(parameters)c(should)j(b)q(e)e(set)g(again.)p eop +%%Page: 27 29 +27 28 bop 0 -83 a Ft(Chapter)15 b(5:)k(More)c(Details)1417 +b(27)0 158 y Fj(5.2.2)30 b(Resolution)62 307 y Ft(T)87 +317 y(E)113 307 y(Xdra)o(w)13 b(scales)h(co)q(ordinates)g(b)q(efore)g +(passing)g(them)g(to)f(P)o(ostScript.)19 b(Keeping)d(trac)o(k)c(of)i +(the)g(co)q(ordinate)0 369 y(scaling)19 b(is)f(necessary)l(,)g(in)h(an) +o(y)e(ev)o(en)o(t,)h(to)f(allo)o(w)h(T)896 379 y(E)922 +369 y(Xdra)o(w)f(to)g(compute)h(the)f(maxim)o(um)h(excursions)h(of)e +(the)0 431 y(co)q(ordinates.)24 b(T)288 441 y(E)313 431 +y(Xdra)o(w)16 b(uses)h(pixel)h(units)f(in)g(its)g(P)o(ostScript)f(co)q +(de.)24 b(One)17 b(pixel)h(unit)g(is)e(equal)i(to)d(1/300)g(of)0 +494 y(an)e(inc)o(h.)21 b(T)201 503 y(E)226 494 y(Xdra)o(w)13 +b(issues)h(P)o(ostScript)f(commands)h(with)f(in)o(teger)h(v)m(alued)h +(pixel)g(co)q(ordinates.)20 b(This)14 b(sets)f(the)0 +556 y(p)q(ositioning)i(resolution)f(for)f(T)533 566 y(E)559 +556 y(Xdra)o(w.)18 b(The)c(passing)g(of)f(in)o(teger)h(v)m(alued)h(co)q +(ordinates)e(whic)o(h)i(corresp)q(ond)f(to)0 618 y(the)i(device)h +(resolution)f(k)o(eeps)g(lines)h(aligned)h(with)e(the)f(device)i(grid;) +f(parallel)h(lines)h(of)d(the)h(same)f(width)h(will)0 +681 y(b)q(e)g(rendered)g(with)g(the)f(same)g(width.)62 +829 y(The)i(p)q(osition)h(sa)o(ving)e(mec)o(hanism)h(in)h(T)787 +839 y(E)812 829 y(Xdra)o(w)e(\(see)h(Section)g(3.3)f([Sa)o(ving)g(p)q +(ositions],)h(page)g(18\))f(asso-)0 891 y(ciates)g(the)f(pixel)i(co)q +(ordinates)e(of)g(a)g(p)q(osition)h(with)g(the)f(sp)q(eci\014ed)i +(name.)62 1040 y(T)87 1050 y(E)113 1040 y(Xdra)o(w)g(uses)i(the)f +(limited)i(real)e(n)o(um)o(b)q(er)g(represen)o(tation)h(pro)o(vided)f +(b)o(y)g(T)1440 1050 y(E)1466 1040 y(X.)g(These)g(op)q(erations)g(are)0 +1102 y(based)i(on)f(the)h(represen)o(tation)f(of)h(dimensions)h(as)e +(real-v)m(alued)i(n)o(um)o(b)q(ers)f(of)f(p)q(oin)o(ts.)34 +b(In)o(ternally)20 b(in)h(T)1878 1112 y(E)1903 1102 y(X,)0 +1164 y(dimensions)e(are)d(stored)h(32-bit)g(v)m(alues,)h(normalized)h +(so)d(that)h(1)f(pt)h(corresp)q(onds)h(to)e(the)h(scaled)h(p)q(oin)o(t) +f(\(sp\))0 1227 y(v)m(alue)d(of)e(65536.)18 b(Dimensions)13 +b(with)g(magnitudes)g(b)q(et)o(w)o(een)g(0.000015)e(pt)h(and)h(32767)e +(pt)i(can)g(b)q(e)g(represen)o(ted.)0 1289 y(This)k(is)g(also)g(the)g +(dynamic)h(range)e(of)g(the)h(T)793 1299 y(E)818 1289 +y(Xdra)o(w)g(pixel)h(co)q(ordinates)f(passed)g(to)f(P)o(ostScript.)24 +b(T)1793 1299 y(E)1819 1289 y(Xdra)o(w)0 1351 y(m)o(ust)17 +b(con)o(v)o(ert)f(from)g(user)i(supplied)h(co)q(ordinates)f(using)g +(the)f(scaling)h(factor)e(\(whic)o(h)i(itself)g(consists)g(of)e(t)o(w)o +(o)0 1414 y(comp)q(onen)o(ts,)d(the)g(unit)h(scale)g(and)f(the)g +(segmen)o(t)g(scale\))g(and)g(a)g(pixel)i(con)o(v)o(ersion)e(factor.)18 +b(The)13 b(use)h(of)e(limited)0 1476 y(precision)j(real)e(n)o(um)o(b)q +(ers)h(in)g(these)f(computations)g(can)h(cause)f(accum)o(ulation)h(of)f +(error)f(when)i(relativ)o(e)g(scaling)0 1538 y(is)i(used)f(rep)q +(eatedly)l(.)0 1850 y Fj(5.2.3)30 b(T)-5 b(ext)15 b(placemen)n(t)62 +1998 y Ft(While)j(in)f(the)f(T)354 2008 y(E)380 1998 +y(Xdra)o(w)g(en)o(vironmen)o(t,)g(T)828 2008 y(E)853 +1998 y(X)h(text)f(is)g(placed)i(in)f(a)f(T)1307 2008 +y(E)1332 1998 y(X)h(b)q(o)o(x)f(while)i(P)o(ostScript)e(co)q(de)g(is)0 +2061 y(written)e(to)e(the)i(in)o(termediate)g(\014le.)21 +b(A)o(t)13 b(the)g(end)h(of)g(the)f(T)1017 2070 y(E)1043 +2061 y(Xdra)o(w)g(en)o(vironmen)o(t,)g(the)h(size)g(of)f(the)h(dra)o +(wing)f(is)0 2123 y(determined.)24 b(A)16 b(T)333 2133 +y(E)358 2123 y(X)g(b)q(o)o(x)g(of)g(this)h(size)f(is)h(created.)22 +b(The)17 b(T)1071 2133 y(E)1096 2123 y(X)f Fq(\\special)f +Ft(mec)o(hanism)i(is)g(used)f(to)g(instruct)0 2185 y(the)e(P)o +(ostScript)g(driv)o(er)g(program)f(to)h(p)q(osition)h(the)f(P)o +(ostScript)g(dra)o(wing)g(from)f(the)i(in)o(termediate)f(\014le)i(in)f +(this)0 2247 y(area.)23 b(Next,)17 b(the)f(text)g(generated)h(b)o(y)f +(T)719 2257 y(E)745 2247 y(Xdra)o(w)g(is)h(p)q(ositioned)h(and)f +(placed)h(in)f(the)g(b)q(o)o(x.)23 b(Note)17 b(that)e(when)0 +2310 y(the)i(do)q(cumen)o(t)h(is)f(prin)o(ted,)h(the)f(P)o(ostScript)g +(dra)o(wing)g(is)h(placed)g(on)f(the)g(page)g(b)q(efore)g(the)h(T)1679 +2320 y(E)1704 2310 y(X)f(text;)g(T)1890 2320 y(E)1916 +2310 y(X)0 2372 y(text)e(will)i(app)q(ear)e(on)g(top)g(of)g(graphics.) +62 2521 y(The)k(rotation)e(of)g(text)h(is)h(carried)f(out)g(with)g +(in-line)j(P)o(ostScript)d(co)q(de)h(whic)o(h)g(do)q(es)f(not)g(app)q +(ear)g(in)h(the)0 2583 y(in)o(termediate)c(P)o(ostScript)f(\014le.)20 +b(This)15 b(co)q(de)f(is)h(sen)o(t)f(to)f(the)h(P)o(ostScript)g(driv)o +(er)g(with)h(a)f Fq(\\special)e Ft(command.)0 2645 y(This)k(P)o +(ostScript)f(co)q(de)h(is)f(em)o(b)q(edded)i(in)f(the)f(dvi)h(\(device) +h(indep)q(enden)o(t\))g(\014le)f(that)f(T)1527 2655 y(E)1552 +2645 y(X)g(pro)q(duces.)p eop +%%Page: 28 30 +28 29 bop 0 -83 a Ft(28)1722 b(T)1793 -73 y(E)1819 -83 +y(Xdra)o(w)0 158 y Fj(5.2.4)30 b(The)15 b(in)n(termediate)g(P)n +(ostScript)h(\014le)62 295 y Ft(The)c(in)o(termediate)g(P)o(ostScript)f +(\014le)h(consists)f(of)g(a)g(header,)h(a)f(b)q(o)q(dy)h(and)f(a)g +(trailer)h(follo)o(wing)g(Encapsulated)0 358 y(P)o(ostScript)g(File)h +(\(EPSF\))e(standards.)19 b(The)12 b(header)h(sets)e(up)i(P)o +(ostScript)f(de\014nitions)i(and)e(default)h(parameter)0 +420 y(v)m(alues.)29 b(The)18 b(trailer)h(includes)h(the)e +Fq(BoundingBox)e Ft(information)i(whic)o(h)h(giv)o(es)f(the)g(co)q +(ordinates)h(in)f(default)0 482 y(P)o(ostScript)d(units)h(\(72)e(p)q +(er)h(inc)o(h\))h(for)f(the)g(lo)o(w)o(er)f(lefthand)i(corner)f(and)h +(the)f(upp)q(er)h(righ)o(thand)f(corner)g(of)g(the)0 +544 y(dra)o(wing.)k(The)12 b(b)q(o)q(dy)h(of)f(the)g(in)o(termediate)h +(P)o(ostScript)f(\014le)h(con)o(tains)g(the)f(P)o(ostScript)g(commands) +g(generated)0 607 y(b)o(y)j(T)88 616 y(E)114 607 y(Xdra)o(w.)62 +744 y(Man)o(y)d(mo)o(v)o(es)f(in)i(T)394 753 y(E)419 +744 y(Xdra)o(w)f(serv)o(e)g(only)g(to)g(p)q(osition)h(text)f(or)f(to)h +(reset)g(sa)o(v)o(ed)f(p)q(ositions.)20 b(T)1648 753 +y(E)1674 744 y(Xdra)o(w)11 b(bu\013ers)0 806 y(mo)o(v)o(e)h(commands)g +(in)i(order)e(to)g(b)q(e)i(able)f(to)f(collapse)i(runs)f(of)f(mo)o(v)o +(es.)19 b(Only)14 b(the)e(last)h(mo)o(v)o(e)f(of)g(a)h(run)g(of)f(mo)o +(v)o(es)0 868 y(is)i(actually)g(written)g(to)f(the)g(P)o(ostScript)h +(\014le.)20 b(Ho)o(w)o(ev)o(er)12 b(the)i(in)o(termediate)g(mo)o(v)o +(es)f(still)i(a\013ect)e(the)g(size)i(of)e(the)0 930 +y(dra)o(wing.)29 b(The)18 b(expunging)i(of)d(mo)o(v)o(es)h(means)g +(that)f(the)i(P)o(ostScript)e(\014le)j Fq(BoundingBox)c +Ft(information)j(ma)o(y)0 993 y(indicate)e(a)e(dra)o(wing)g(size)h +(larger)f(than)g(the)g(P)o(ostScript)g(commands)g(themselv)o(es)h(w)o +(ould)g(w)o(arran)o(t.)62 1130 y(Dra)o(wing)22 b(segmen)o(ts)h(in)g(T) +539 1139 y(E)565 1130 y(Xdra)o(w)f(sho)o(w)g(up)i(in)f(the)g(P)o +(ostScript)g(\014le)h(as)e(sa)o(v)o(es)g(and)h(restores)f(of)h(the)0 +1192 y(P)o(ostScript)d(graphics)h(state.)33 b(Segmen)o(t)20 +b(starts)f(are)h(bu\013ered)h(and)f(only)h(written)f(out)g(if)g +(necessary)l(.)35 b(This)0 1254 y(w)o(a)o(y)14 b(\\empt)o(y")h(segmen)o +(ts)g(do)g(not)g(generate)g(output)g(to)g(the)g(P)o(ostScript)h +(\014le.)21 b(These)16 b(empt)o(y)f(segmen)o(ts)g(arise)0 +1316 y(if)22 b(a)f(segmen)o(t)f(con)o(tains)i(only)f(mo)o(v)o(es)g(and) +g(text)g(commands.)38 b(The)21 b(mo)o(v)o(es)f(inside)j(the)f(segmen)o +(t)e(are)h(not)0 1379 y(needed)16 b(since)h(they)e(are)g(lo)q(cal)h(to) +f(the)g(segmen)o(t,)f(and)i(the)f(text)g(commands)g(do)g(not)f +(generate)h(output)g(to)g(the)0 1441 y(P)o(ostScript)g(\014le.)62 +1578 y(If)h(T)133 1588 y(E)158 1578 y(Xdra)o(w)f(is)h(used)f(only)h +(for)f(mo)o(v)o(es)f(and)h(text,)g(no)g(in)o(termediate)h(P)o +(ostScript)f(\014le)h(will)h(b)q(e)f(created.)0 1798 +y Fs(5.3)33 b(Ho)n(w)14 b(T)304 1812 y(E)339 1798 y(Xdra)n(w)h(merges)f +(graphics)i(and)g(text)62 1935 y Ft(T)87 1945 y(E)113 +1935 y(Xdra)o(w)f(creates)g(a)g(b)q(o)o(x)g(whic)o(h)i(is)f(the)f(same) +h(size)g(as)f(the)h(graphic.)21 b(The)16 b(prin)o(ter)f(driv)o(er)h +(will)h(place)g(the)0 1998 y(P)o(ostScript)h(graphic)h(in)o(to)g(this)f +(space.)30 b(An)o(y)19 b(T)852 2007 y(E)877 1998 y(X)g(text)e +(generated)i(b)o(y)f(the)h(T)1411 2007 y(E)1436 1998 +y(Xdra)o(w)f(commands)g(will)i(b)q(e)0 2060 y(sup)q(erimp)q(osed)d(on)e +(this)h(graphic.)62 2197 y(The)c(LaT)228 2207 y(E)254 +2197 y(X2e)f(fron)o(t-end)h(for)f(T)627 2207 y(E)653 +2197 y(Xdra)o(w)g(is)h(enabled)h(b)o(y)f(including)i(the)e +Fq(texdraw)e Ft(pac)o(k)m(age.)19 b(The)12 b Fq(texdraw)0 +2259 y Ft(pac)o(k)m(age)21 b(automatically)g(in)o(v)o(ok)o(es)g(the)f +(standard)h Fq(graphics)e Ft(pac)o(k)m(age)i(distributed)h(with)g(LaT) +1720 2269 y(E)1745 2259 y(X2e.)37 b(The)0 2321 y Fq(graphics)18 +b Ft(pac)o(k)m(age)h(has)g(supp)q(ort)g(for)f(a)h(n)o(um)o(b)q(er)g(of) +g(di\013eren)o(t)g(prin)o(ter)g(driv)o(ers,)h(including)i(a)c(n)o(um)o +(b)q(er)i(for)0 2384 y(P)o(ostScript)c(prin)o(ters.)22 +b(An)o(y)15 b(options)h(to)g(the)g Fq(texdraw)e Ft(pac)o(k)m(age)i(are) +g(passed)g(on)g(to)f(the)h Fq(graphics)e Ft(pac)o(k)m(age.)0 +2446 y(Suc)o(h)i(an)f(option)g(can)h(b)q(e)g(used)f(to)g(select)h(a)f +(driv)o(er)g(other)g(than)g(the)h(default)f(one.)62 2583 +y(Within)20 b(the)f Fq(graphics)e Ft(pac)o(k)m(age,)i(the)g(driv)o(er)g +(option)f(is)h(used)g(to)f(select)i(de\014nitions)g(for)e(the)h(lo)o +(w-lev)o(el)0 2645 y(macros)11 b(whic)o(h)i(generate)e(the)h +Fq(\\special)f Ft(commands)h(needed)h(to)e(request)h(insertion)h(of)f +(a)f(graphics)i(\014le)g(and)f(to)p eop +%%Page: 29 31 +29 30 bop 0 -83 a Ft(Chapter)15 b(5:)k(More)c(Details)1417 +b(29)0 158 y(rotate)12 b(text.)225 142 y Fn(1)263 158 +y Ft(T)288 168 y(E)313 158 y(Xdra)o(w)h(uses)h(the)f(user-lev)o(el)j +(macros)c(de\014ned)j(b)o(y)f(the)f Fq(graphics)g Ft(pac)o(k)m(age)g +(\(see)h(Section)g(4.1)0 221 y([P)o(ostScript)d(prin)o(ter)g(driv)o +(ers],)h(page)f(23\).)18 b(When)12 b(not)f(used)h(with)g(the)f(LaT)1302 +230 y(E)1328 221 y(X2e)g(fron)o(t-end,)h(T)1648 230 y(E)1673 +221 y(Xdra)o(w)f(de\014nes)0 283 y(v)o(ersions)k(of)g(these)h(macros)e +(that)g(are)h(suitable)i(for)d(use)i(with)f(the)h Fq(dvips)e +Ft(prin)o(ter)i(driv)o(er.)p 0 2589 600 2 v 21 2627 a +Fn(1)62 2644 y Ft(Not)f(all)h(P)o(ostScript)f(driv)o(ers)h(supp)q(ort)f +(text)g(rotation.)p eop +%%Page: 30 32 +30 31 bop 0 -83 a Ft(30)1722 b(T)1793 -73 y(E)1819 -83 +y(Xdra)o(w)p eop +%%Page: 31 33 +31 32 bop 0 -83 a Ft(App)q(endix)17 b(A:)e(P)o(ostScript)g(Commands) +1190 b(31)0 158 y Fp(App)r(endix)13 b(A)41 b(P)n(ostScript)15 +b(Commands)62 341 y Ft(This)i(app)q(endix)g(describ)q(es)h(a)d(set)g +(of)h(macros)f(for)g(accessing)h(some)g(of)f(the)h(P)o(ostScript)g +(builtin)i(functions.)0 403 y(Eac)o(h)13 b(of)f(these)h(macros)f +(issues)h(a)g(single)h(P)o(ostScript)e(command.)19 b(The)13 +b(extra)f(services)i(pro)o(vided)f(b)o(y)g(T)1793 413 +y(E)1819 403 y(Xdra)o(w)0 465 y(are)20 b(the)h(in)o(terpretation)f(of)h +(co)q(ordinates)f(in)i(user)e(units)h(relativ)o(e)h(to)d(the)i(curren)o +(t)f(dra)o(wing)h(segmen)o(t)f(and)0 528 y(the)c(writing)g(of)f(a)h(p)q +(ending)h(T)525 537 y(E)551 528 y(Xdra)o(w)e(mo)o(v)o(e)g(to)g(the)h(P) +o(ostScript)f(\014le.)23 b(This)16 b(last)g(op)q(eration)g(establishes) +h(the)0 590 y(curren)o(t)f(p)q(oin)o(t)h(in)g(P)o(ostScript.)24 +b(The)16 b(user)h(of)f(these)g(commands)h(should)g(b)q(e)g(familiar)g +(with)g(the)g(concepts)f(of)0 652 y(path)h(construction)h(and)g +(\014lling)i(in)e(P)o(ostScript.)27 b(F)l(urther)17 b(details)i(on)e +(the)h(P)o(ostScript)f(functions)i(used)f(can)0 714 y(found)h(in)h(the) +e Fo(P)o(ostScript)h(Language)f(Reference)i(Man)o(ual,)g(Second)f +(Edition)p Ft(,)h(Adob)q(e)g(Systems,)f(Addison-)0 777 +y(W)l(esley)l(,)d(1990.)62 914 y(These)g(macros)e(are)h(distributed)i +(in)f(\014le)g(`)p Fq(txdps.tex)p Ft('.)62 1051 y(The)i +Fq(\\PSsetlinecap)e Ft(and)h Fq(\\PSsetlinejoin)f Ft(commands)h(con)o +(trol)g(the)g(w)o(a)o(y)g(line)i(ends)f(and)f(line)j(joins)0 +1113 y(are)15 b(rendered.)22 b(The)15 b(default)h(v)m(alues)h(set)e(b)o +(y)g(T)823 1123 y(E)849 1113 y(Xdra)o(w)g(\(round)g(caps)g(and)h(round) +g(join\))f(are)g(appropriate)h(for)0 1175 y(most)e(dra)o(wings.)20 +b(Changes)15 b(to)g(these)g(parameters)f(apply)i(to)f(the)g(curren)o(t) +g(and)h(subsequen)o(t)g(paths.)0 1335 y Fq(\\PSsetlinecap)d +Fo(t)o(yp)q(e)240 1397 y Ft(Set)j(the)h(line)h(cap)f(parameter.)22 +b(The)17 b(v)m(alue)g Fq(0)g Ft(giv)o(es)f(a)g(butt)h(cap;)f +Fq(1)h Ft(giv)o(es)f(a)g(round)h(cap;)g(and)f Fq(2)240 +1459 y Ft(giv)o(es)f(a)g(pro)s(jecting)g(square)g(cap.)20 +b(The)c(initial)h(v)m(alue)g(is)e(corresp)q(onds)h(to)e(a)h(round)h +(cap.)0 1544 y Fq(\\PSsetlinejoin)d Fo(t)o(yp)q(e)240 +1607 y Ft(Set)h(the)h(line)h(join)f(parameter.)k(The)14 +b(v)m(alue)i Fq(0)e Ft(giv)o(es)g(a)g(miter)h(join;)g +Fq(1)f Ft(giv)o(es)g(a)g(round)h(join;)g(and)f Fq(2)240 +1669 y Ft(giv)o(es)h(a)g(b)q(ev)o(el)i(join.)j(The)15 +b(initial)j(v)m(alue)e(corresp)q(onds)g(to)e(a)h(round)h(join.)62 +1817 y(P)o(ostScript)k(paths)f(and)h(\014ll)h(op)q(erations)f(can)f(b)q +(e)i(con)o(trolled)f(b)o(y)f(a)h(n)o(um)o(b)q(er)g(of)f(functions.)34 +b(By)19 b(design,)0 1880 y(T)25 1889 y(E)51 1880 y(Xdra)o(w)13 +b(alw)o(a)o(ys)g(main)o(tains)h(a)g(de\014ned)h(P)o(ostScript)f(curren) +o(t)g(p)q(oin)o(t.)20 b(Some)13 b(of)h(the)g(follo)o(wing)h(macros)e +(cause)0 1942 y(the)h(P)o(ostScript)g(curren)o(t)g(p)q(oin)o(t)h(to)e +(b)q(ecome)i(unde\014ned.)22 b(The)14 b(P)o(ostScript)g(curren)o(t)g(p) +q(oin)o(t)h(m)o(ust)e(b)q(e)i(set)f(again)0 2004 y(\(sa)o(y)g(with)i(a) +f Fq(\\PSmoveto)f Ft(command\))g(b)q(efore)i(in)o(v)o(oking)g(basic)f +(T)1149 2014 y(E)1175 2004 y(Xdra)o(w)g(commands.)0 2164 +y Fq(\\PSstroke)240 2226 y Ft(Strok)o(e)g(a)g(P)o(ostScript)g(path.)21 +b(The)15 b(curren)o(t)h(path)f(is)h(strok)o(ed)f(with)g(the)h(curren)o +(t)f(gra)o(y)g(lev)o(el)i(\(set)240 2288 y(with)c Fq(\\setgray)p +Ft(\))d(and)j(the)f(curren)o(t)g(line)i(pattern)e(\(set)f(with)i +Fq(\\lpatt)p Ft(\).)18 b(The)12 b(P)o(ostScript)g(curren)o(t)240 +2351 y(p)q(oin)o(t)k(b)q(ecomes)f(unde\014ned.)0 2436 +y Fq(\\PSnewpath)240 2498 y Ft(Establish)h(a)f(new)g(path.)20 +b(The)c(P)o(ostScript)f(curren)o(t)g(p)q(oin)o(t)g(b)q(ecomes)h +(unde\014ned.)0 2583 y Fq(\\PSclosepath)240 2645 y Ft(Close)f(a)g +(subpath.)21 b(A)15 b(new)g(subpath)h(is)f(started.)p +eop +%%Page: 32 34 +32 33 bop 0 -83 a Ft(32)1722 b(T)1793 -73 y(E)1819 -83 +y(Xdra)o(w)0 158 y Fq(\\PSfill)72 b Ft(Fill)14 b(a)d(region)i +(de\014ned)g(b)o(y)f(a)g(path.)19 b(Eac)o(h)12 b(subpath)g(is)h(closed) +g(and)f(the)g(enclosed)i(regions)e(pain)o(ted)240 221 +y(with)h(the)f(curren)o(t)h(gra)o(y)e(lev)o(el.)20 b(The)13 +b(P)o(ostScript)f(curren)o(t)h(p)q(oin)o(t)f(b)q(ecomes)i(unde\014ned.) +20 b(The)13 b(gra)o(y)240 283 y(lev)o(el)k(can)e(b)q(e)h(set)f(with)g +(the)h(T)767 293 y(E)792 283 y(Xdra)o(w)f(command)g Fq(\\setgray)p +Ft(.)62 435 y(The)g(follo)o(wing)g(line)h(commands)e(in)o(terpret)g(co) +q(ordinates)h(relativ)o(e)f(to)g(the)g(curren)o(t)g(T)1557 +445 y(E)1583 435 y(Xdra)o(w)f(scaling)j(and)0 497 y(dra)o(wing)f +(segmen)o(t.)20 b(The)15 b(sp)q(eci\014ed)i(co)q(ordinate)f(a\013ects)e +(the)i(dra)o(wing)f(size)h(as)f(determined)h(b)o(y)f(T)1726 +507 y(E)1752 497 y(Xdra)o(w.)0 663 y Fq(\\PSlineto)f(\()p +Fo(x)k(y)t Fq(\))240 726 y Ft(Add)g(a)g(line)h(segmen)o(t)e(to)g(the)h +(curren)o(t)g(path.)27 b(This)18 b(command)g(is)g(iden)o(tical)h(to)e +(the)h(T)1793 735 y(E)1819 726 y(Xdra)o(w)240 788 y(command)e +Fq(\\lvec)p Ft(.)21 b(The)c(P)o(ostScript)e(curren)o(t)h(p)q(oin)o(t)h +(m)o(ust)e(b)q(e)i(de\014ned)g(b)q(efore)g(this)f(command)240 +850 y(is)g(issued.)0 940 y Fq(\\PSmoveto)e(\()p Fo(x)k(y)t +Fq(\))240 1002 y Ft(Mo)o(v)o(e)i(to)h(the)g(co)q(ordinate)g(sp)q +(eci\014ed)i(b)o(y)e Fq(\()p Fo(x)d(y)t Fq(\))p Ft(.)38 +b(The)21 b(P)o(ostScript)g(curren)o(t)g(p)q(oin)o(t)g(b)q(ecomes)240 +1065 y(de\014ned.)62 1217 y(The)d(follo)o(wing)g(macros)f(pro)o(vide)i +(access)e(to)g(the)h(general)g(arc)f(commands)h(in)g(P)o(ostScript.)27 +b(The)18 b(co)q(ordi-)0 1279 y(nates)d(are)g(in)o(terpreted)i(relativ)o +(e)f(to)f(the)g(curren)o(t)h(T)910 1289 y(E)935 1279 +y(Xdra)o(w)f(scaling)i(and)e(dra)o(wing)h(segmen)o(t.)k(The)c(sp)q +(eci\014ed)0 1341 y(co)q(ordinate)g(a\013ects)e(the)h(dra)o(wing)g +(size)i(as)d(determined)j(b)o(y)e(T)1083 1351 y(E)1108 +1341 y(Xdra)o(w.)0 1508 y Fq(\\PSarc)f(r:)p Fo(radius)k +Fq(sd:)p Fo(start-angle)e Fq(ed:)p Fo(end-angle)j Fq(\()p +Fo(x)f(y)t Fq(\))240 1570 y Ft(Dra)o(w)12 b(a)h(coun)o(terclo)q(c)o +(kwise)h(arc.)19 b(The)13 b(cen)o(ter)g(of)g(the)g(arc)g(is)h(at)e(the) +h(giv)o(en)h(p)q(osition.)20 b(The)13 b(radius)240 1632 +y(is)g(sp)q(eci\014ed)i(b)o(y)e Fo(radius)p Ft(.)19 b(The)13 +b(start)f(and)h(end)g(angles)h(\(in)f(degrees\))f(are)h(sp)q(eci\014ed) +i(b)o(y)d Fo(start-angle)240 1694 y Ft(and)i Fo(end-angle)p +Ft(.)21 b(If)14 b(the)f(P)o(ostScript)h(curren)o(t)f(p)q(oin)o(t)h(is)h +(de\014ned,)g(this)f(command)f(also)h(dra)o(ws)f(the)240 +1757 y(line)k(from)e(the)h(curren)o(t)f(p)q(oin)o(t)h(to)f(the)h(b)q +(eginning)h(of)e(the)h(arc.)k(The)c(line)h(and)f(arc)f(b)q(ecome)i +(part)240 1819 y(of)e(the)g(curren)o(t)g(path.)20 b(The)15 +b(curren)o(t)g(p)q(oin)o(t)h(b)q(ecomes)g(de\014ned.)0 +1909 y Fq(\\PSarcn)e(r:)p Fo(radius)k Fq(sd:)p Fo(start-angle)e +Fq(ed:)p Fo(end-angle)j Fq(\()p Fo(x)f(y)t Fq(\))240 +1971 y Ft(Dra)o(w)g(a)g(clo)q(c)o(kwise)i(arc.)31 b(The)19 +b(cen)o(ter)g(of)f(the)h(arc)g(is)g(at)g(the)g(giv)o(en)g(p)q(osition.) +32 b(The)19 b(radius)g(is)240 2033 y(sp)q(eci\014ed)f(b)o(y)e +Fo(radius)p Ft(.)23 b(The)17 b(start)d(and)j(end)f(angles)h(\(in)f +(degrees\))h(are)e(sp)q(eci\014ed)j(b)o(y)e Fo(start-angle)240 +2096 y Ft(and)e Fo(end-angle)p Ft(.)21 b(If)14 b(the)f(P)o(ostScript)h +(curren)o(t)f(p)q(oin)o(t)h(is)h(de\014ned,)g(this)f(command)f(also)h +(dra)o(ws)f(the)240 2158 y(line)k(from)e(the)h(curren)o(t)f(p)q(oin)o +(t)h(to)f(the)h(b)q(eginning)h(of)e(the)h(arc.)k(The)c(line)h(and)f +(arc)f(b)q(ecome)i(part)240 2220 y(of)e(the)g(curren)o(t)g(path.)20 +b(The)15 b(curren)o(t)g(p)q(oin)o(t)h(b)q(ecomes)g(de\014ned.)62 +2372 y(The)j(macro)e Fq(\\writeps)g Ft(pro)o(vides)h(the)g(general)h +(facilit)o(y)g(to)e(write)i(arbitrary)e(P)o(ostScript)h(commands)g(to)0 +2435 y(the)13 b(P)o(ostScript)f(\014le.)20 b(This)13 +b(macro)f(is)h(used)g(b)o(y)f(the)h(preceding)h(commands)e(and)h(b)o(y) +f(the)h(T)1571 2444 y(E)1596 2435 y(Xdra)o(w)f(commands)0 +2497 y(themselv)o(es.)20 b(This)13 b(facilit)o(y)g(has)f(to)g(b)q(e)h +(used)h(with)e(care)h(since)g(c)o(hanges)g(in)g(p)q(osition)h(or)e +(scaling)h(resulting)h(from)0 2559 y(the)h(P)o(ostScript)g(commands)g +(are)g(not)g(kno)o(wn)g(to)f(T)906 2569 y(E)932 2559 +y(Xdra)o(w.)p eop +%%Page: 33 35 +33 34 bop 0 -83 a Ft(App)q(endix)17 b(A:)e(P)o(ostScript)g(Commands) +1190 b(33)0 158 y Fq(\\writeps)14 b({<)p Fo(ps-commands)p +Fq(>})240 221 y Ft(W)l(rite)25 b(P)o(ostScript)f(commands)g(to)f(the)i +(in)o(termediate)g(P)o(ostScript)f(\014le.)48 b(Before)25 +b(the)f(com-)240 283 y(mands)15 b(are)g(inserted,)h(an)o(y)f(p)q +(ending)i(T)929 293 y(E)955 283 y(Xdra)o(w)e(mo)o(v)o(e)f(is)i(written) +f(to)g(the)g(P)o(ostScript)g(\014le.)22 b(The)240 345 +y(P)o(ostScript)15 b(scaling)h(giv)o(es)g(300)e(units/inc)o(h.)p +eop +%%Page: 34 36 +34 35 bop 0 -83 a Ft(34)1722 b(T)1793 -73 y(E)1819 -83 +y(Xdra)o(w)p eop +%%Page: 35 37 +35 36 bop 0 -83 a Ft(App)q(endix)17 b(B:)e(T)293 -73 +y(E)319 -83 y(Xdra)o(w)f(T)l(o)q(olb)q(o)o(x)1280 b(35)0 +158 y Fp(App)r(endix)13 b(B)41 b(T)500 174 y(E)543 158 +y(Xdra)n(w)15 b(T)-7 b(o)r(olb)r(o)n(x)62 329 y Ft(This)14 +b(app)q(endix)g(describ)q(es)h(some)d(of)g(the)h(macros)f(supplied)j +(with)f(T)1242 339 y(E)1267 329 y(Xdra)o(w)e(whic)o(h)i(can)f(b)q(e)g +(used)h(to)e(de\014ne)0 392 y(additional)17 b(commands)e(for)g +(creating)g(dra)o(wings.)21 b(The)15 b(macros)g(describ)q(ed)i(here)f +(w)o(ork)f(in)h(the)f(user)h(sp)q(eci\014ed)0 454 y(co)q(ordinate)e +(system.)19 b(Some)14 b(of)f(these)h(to)q(olb)q(o)o(x)g(macros)f(are)g +(used)h(b)o(y)g(the)g(T)1331 464 y(E)1356 454 y(Xdra)o(w)f(commands)h +(themselv)o(es,)0 516 y(others)h(are)g(supplied)i(in)f(an)f(auxiliary)i +(\014le)f(`)p Fq(txdtools.tex)p Ft('.)0 725 y Fs(B.1)33 +b(Co)r(ordinate)15 b(parsing)62 862 y Ft(The)g(co)q(ordinate)g(parsing) +h(macro)e Fq(\\getpos)f Ft(is)j(useful)g(for)e(creating)h(new)g +(commands.)k(This)d(macro)e(tak)o(es)0 924 y(care)19 +b(of)f(stripping)i(leading)g(and)f(trailing)h(blanks)g(from)e(co)q +(ordinates)h(sp)q(eci\014ed)i(b)q(et)o(w)o(een)e(paren)o(theses.)31 +b(In)0 986 y(addition,)21 b(sym)o(b)q(olic)f(co)q(ordinates)g(are)e +(translated)h(to)g(the)g(corresp)q(onding)h(relativ)o(e)g(co)q +(ordinate)f(using)h(the)0 1049 y(segmen)o(t)15 b(o\013set)f(and)h +(scaling)i(in)f(e\013ect.)62 1186 y(The)g(macro)e Fq(\\currentpos)g +Ft(returns)h(the)g(relativ)o(e)h(co)q(ordinates)f(of)g(the)g(curren)o +(t)g(p)q(osition.)21 b(The)16 b(returned)0 1248 y(v)m(alues)f(are)f +(relativ)o(e)h(to)e(the)i(curren)o(t)f(segmen)o(t)g(and)g(the)g(curren) +o(t)g(scaling.)21 b(The)14 b(macro)g Fq(\\cossin)f Ft(returns)h(the)0 +1310 y(real-v)m(alued)21 b(cosine)e(and)g(sine)h(of)e(the)h(direction)g +(of)g(the)f(line)j(joining)e(t)o(w)o(o)f(p)q(oin)o(ts.)30 +b(The)19 b(macro)f Fq(\\vectlen)0 1372 y Ft(returns)d(the)g(length)h +(of)f(a)g(v)o(ector.)k(The)c(results)h(app)q(ear)f(as)g(the)h(v)m(alue) +g(of)f(user)g(supplied)j(macro)c(names.)0 1526 y Fq(\\getpos)g(\()p +Fo(x)k(y)t Fq(\)\\)p Fo(mx)s Fq(\\)p Fo(m)o(y)240 1589 +y Ft(Deco)q(de)e(co)q(ordinate)h(v)m(alues.)23 b(The)16 +b(co)q(ordinates)g(sp)q(eci\014ed)i(b)o(y)e Fq(\()p Fo(x)i(y)t +Fq(\))e Ft(are)f(deco)q(ded.)23 b(Sym)o(b)q(olic)240 +1651 y(co)q(ordinates)18 b(are)g(translated)f(to)g(the)h(corresp)q +(onding)h(relativ)o(e)f(co)q(ordinate)h(using)f(the)g(curren)o(t)240 +1713 y(segmen)o(t)13 b(o\013set)f(and)h(scaling.)21 b(The)13 +b(resulting)h(c)o(haracter)f(strings)g(represen)o(ting)h(the)f(real-v)m +(alued)240 1776 y(co)q(ordinates)j(are)e(assigned)i(to)f(the)g(macros)f +(sp)q(eci\014ed)k(b)o(y)d Fq(\\)p Fo(mx)j Ft(and)d Fq(\\)p +Fo(m)o(y)t Ft(.)0 1855 y Fq(\\currentpos)f(\\)p Fo(mx)s +Fq(\\)p Fo(m)o(y)240 1917 y Ft(Return)20 b(the)g(co)q(ordinates)h(of)e +(the)h(curren)o(t)g(p)q(osition.)34 b(The)21 b(co)q(ordinates)f(are)f +(relativ)o(e)i(to)e(the)240 1979 y(curren)o(t)h(segmen)o(t)f(o\013set)g +(and)h(scaling.)34 b(The)20 b(resulting)h(c)o(haracter)e(strings)h +(represen)o(ting)g(the)240 2042 y(real-v)m(alued)d(co)q(ordinates)f +(are)f(assigned)g(to)g(the)g(macros)g(sp)q(eci\014ed)i(b)o(y)e +Fq(\\)p Fo(mx)j Ft(and)e Fq(\\)p Fo(m)o(y)t Ft(.)0 2121 +y Fq(\\cossin)e(\()p Fo(x1)19 b(y1)t Fq(\)\()p Fo(x2)e(y2)t +Fq(\)\\)p Fo(cosa)p Fq(\\)p Fo(sina)240 2183 y Ft(Return)g(the)f +(cosine)h(and)f(sine)h(of)f(the)g(direction)h(of)f(a)g(v)o(ector)f +(joining)i(t)o(w)o(o)e(p)q(oin)o(ts.)23 b(The)16 b(cosine)240 +2246 y(and)d(sine)h(of)f(the)g(angle)h(of)f(the)g(v)o(ector)f(whic)o(h) +i(go)q(es)f(from)g Fq(\()p Fo(x1)18 b(y1)t Fq(\))12 b +Ft(to)h Fq(\()p Fo(x2)18 b(y2)t Fq(\))p Ft(.)g(The)c(c)o(haracter)240 +2308 y(strings)f(represen)o(ting)g(these)g(real-v)m(alued)i(quan)o +(tities)e(are)g(assigned)g(to)f(the)h(macros)f(sp)q(eci\014ed)j(b)o(y) +240 2370 y Fq(\\)p Fo(cosa)g Ft(and)g Fq(\\)p Fo(sina)p +Ft(.)0 2449 y Fq(\\vectlen)f(\()p Fo(x1)k(y1)t Fq(\)\()p +Fo(x2)g(y2)t Fq(\)\\)p Fo(len)240 2512 y Ft(Return)c(the)g(length)g(of) +f(a)g(v)o(ector)g(joining)i(t)o(w)o(o)d(p)q(oin)o(ts.)20 +b(The)14 b(length)g(of)f(the)h(v)o(ector)e(is)i(relativ)o(e)h(to)240 +2574 y(the)d(curren)o(t)h(scaling.)20 b(The)12 b(c)o(haracter)g(string) +g(represen)o(ting)h(the)f(real-v)m(alued)j(length)e(is)f(assigned)240 +2636 y(to)j(the)g(macro)f(sp)q(eci\014ed)k(b)o(y)d Fq(\\)p +Fo(len)p Ft(.)p eop +%%Page: 36 38 +36 37 bop 0 -83 a Ft(36)1722 b(T)1793 -73 y(E)1819 -83 +y(Xdra)o(w)0 158 y Fs(B.2)33 b(Real)15 b(arithmetic)62 +303 y Ft(The)k(T)184 312 y(E)210 303 y(Xdra)o(w)f(to)q(olb)q(o)o(x)h +(supplies)i(macros)d(to)h(p)q(erform)f(real)i(arithmetic)f(on)g(co)q +(ordinate)g(v)m(alues.)33 b(The)0 365 y(result)16 b(app)q(ears)f(as)g +(the)g(v)m(alue)h(of)f(a)g(user)g(supplied)j(macro)c(name.)0 +549 y Fq(\\realadd)g({)p Fo(v)m(alue1)t Fq(})i({)p Fo(v)m(alue2)t +Fq(})f(\\)p Fo(sum)240 611 y Ft(Add)h(t)o(w)o(o)f(real)h(quan)o +(tities,)g(assigning)g(the)g(resultan)o(t)f(c)o(haracter)g(string)h +(represen)o(ting)g(the)g(sum)240 673 y(to)f(the)g(macro)f +Fq(\\)p Fo(sum)p Ft(.)0 775 y Fq(\\realmult)g({)p Fo(v)m(alue1)t +Fq(})h({)p Fo(v)m(alue2)t Fq(})h(\\)p Fo(pro)q(d)240 +837 y Ft(Multiply)i(t)o(w)o(o)e(real)g(quan)o(tities,)i(assigning)f +(the)g(resultan)o(t)f(c)o(haracter)g(string)h(represen)o(ting)g(the)240 +899 y(pro)q(duct)f(to)e(the)h(macro)g Fq(\\)p Fo(pro)q(d)r +Ft(.)0 1001 y Fq(\\realdiv)f({)p Fo(v)m(alue1)t Fq(})i({)p +Fo(v)m(alue2)t Fq(})f(\\)p Fo(result)240 1063 y Ft(Divide)22 +b(t)o(w)o(o)d(real)j(quan)o(tities,)g(assigning)f(the)g(resultan)o(t)g +(c)o(haracter)f(string)h(represen)o(ting)g(the)240 1126 +y(result)16 b(of)e Fo(v)m(alue1)t Ft(/)p Fo(v)m(alue2)21 +b Ft(to)14 b(the)h(macro)g Fq(\\)p Fo(result)q Ft(.)0 +1415 y Fs(B.3)33 b(Arro)n(w)15 b(curv)n(e)62 1560 y Ft(This)h(example)h +(illustrates)f(the)g(use)g(of)f(the)g(T)868 1569 y(E)894 +1560 y(Xdra)o(w)g(to)q(olb)q(o)o(x)g(routines)h(to)f(do)h(computations) +f(with)h(the)0 1622 y(co)q(ordinates.)k(The)c(problem)f(will)i(b)q(e)f +(tac)o(kled)g(in)g(t)o(w)o(o)e(parts.)19 b(First,)14 +b(w)o(e)h(will)i(pro)q(duce)f(a)f(macro)f(to)h(place)h(an)0 +1684 y(arro)o(whead)g(on)g(a)g(Bezier)i(curv)o(e.)24 +b(Then)17 b(giv)o(en)g(this)g(macro,)f(w)o(e)g(will)j(pro)q(duce)e(a)f +(macro)g(whic)o(h)i(can)e(dra)o(w)g(a)0 1747 y(\\wiggly")f(line)i(from) +d(the)i(curren)o(t)f(p)q(osition)h(to)f(a)f(giv)o(en)i(co)q(ordinate.) +675 2189 y @beginspecial 0 @hoffset 3 @voffset @setspecial +%%BeginDocument: texdraw.p10 +50 dict begin +/mv {stroke moveto} def +/lv {lineto} def +/st {currentpoint stroke moveto} def +/sl {st setlinewidth} def +/sd {st 0 setdash} def +/sg {st setgray} def +/bs {gsave} def /es {stroke grestore} def +/fl {gsave setgray fill grestore + currentpoint newpath moveto} def +/fp {gsave setgray fill grestore st} def +/cv {curveto} def +/cr {gsave currentpoint newpath 3 -1 roll 0 360 arc + stroke grestore} def +/fc {gsave setgray currentpoint newpath + 3 -1 roll 0 360 arc fill grestore} def +/ar {gsave currentpoint newpath 5 2 roll arc stroke grestore} def +/el {gsave /svm matrix currentmatrix def + currentpoint translate scale newpath 0 0 1 0 360 arc + svm setmatrix stroke grestore} def +/fe {gsave setgray currentpoint translate scale newpath + 0 0 1 0 360 arc fill grestore} def +/av {/hhwid exch 2 div def /hlen exch def + /ah exch def /tipy exch def /tipx exch def + currentpoint /taily exch def /tailx exch def + /dx tipx tailx sub def /dy tipy taily sub def + /alen dx dx mul dy dy mul add sqrt def + /blen alen hlen sub def + gsave tailx taily translate dy dx atan rotate + (V) ah ne {blen 0 gt {blen 0 lineto} if} {alen 0 lineto} ifelse + stroke blen hhwid neg moveto alen 0 lineto blen hhwid lineto + (T) ah eq {closepath} if + (W) ah eq {gsave 1 setgray fill grestore closepath} if + (F) ah eq {fill} {stroke} ifelse + grestore tipx tipy moveto} def +0.24 0.24 scale +1 setlinecap 1 setlinejoin +3 setlinewidth [] 0 setdash +0 0 moveto +0 0 mv +420 30 -120 -30 300 0 cv +300 0 mv +bs +285 -1 mv +300 0 (W) 48 24 av +es +bs +300 0 mv +270 420 330 -120 300 300 cv +300 300 mv +bs +301 285 mv +300 300 (W) 48 24 av +es +es +bs +300 0 mv +690 450 210 -150 600 300 cv +600 300 mv +bs +590 289 mv +600 300 (W) 48 24 av +es +es +bs +300 0 mv +720 30 180 -30 600 0 cv +600 0 mv +bs +585 -1 mv +600 0 (W) 48 24 av +es +es +stroke end showpage +%%EndDocument + @endspecial 975 1869 a(tip)g(at)e Fq(\(1)24 b(1\))54 +b Ft(tip)16 b(at)e Fq(\(2)24 b(1\))1275 2169 y Ft(tip)16 +b(at)e Fq(\(2)24 b(0\))62 2334 y Ft(The)18 b(\014rst)g(macro,)f +Fq(\\cavec)p Ft(,)h(uses)g(the)g Fq(\\cossin)f Ft(command)h(to)f +(determine)i(the)f(the)g(cosine)g(and)h(sine)f(of)0 2396 +y(the)e(angle)h(of)f(the)h(line)h(joining)f(the)f(second)h(con)o(trol)f +(p)q(oin)o(t)h(to)f(the)g(end)h(p)q(oin)o(t)g(of)f(the)g(Bezier)i(curv) +o(e.)23 b(Recall)0 2458 y(that)15 b(the)h(Bezier)h(curv)o(e)f(is)g +(tangen)o(t)f(to)g(this)h(line)h(at)e(the)h(end)h(p)q(oin)o(t.)22 +b(After)15 b(dra)o(wing)h(the)f(Bezier)i(curv)o(e,)f(the)0 +2521 y(scaling)f(is)g(set)g(lo)q(cally)h(to)e(absolute)g(units)i(of)e +(0.05)f(inc)o(hes.)21 b(W)l(e)14 b(go)g(bac)o(k)g(do)o(wn)g(the)h(line) +h(from)e(the)g(end)h(p)q(oin)o(t)0 2583 y(b)o(y)g(0.05)f(inc)o(hes)j +(and)e(dra)o(w)g(an)g(arro)o(w)f(v)o(ector)g(to)h(the)g(end)h(p)q(oin)o +(t)g(from)e(there.)20 b(This)c(arro)o(w)e(v)o(ector)g(is)i(mostly)0 +2645 y(arro)o(whead,)e(with)h(little)i(or)e(no)g(tail.)p +eop +%%Page: 37 39 +37 38 bop 0 -83 a Ft(App)q(endix)17 b(B:)e(T)293 -73 +y(E)319 -83 y(Xdra)o(w)f(T)l(o)q(olb)q(o)o(x)1280 b(37)120 +158 y Fq(\\def\\cavec)22 b(\(#1)i(#2\)\(#3)f(#4\)\(#5)g(#6\){)168 +210 y(\\clvec)g(\(#1)g(#2\)\(#3)g(#4\)\(#5)g(#6\))168 +262 y(\\cossin)g(\(#3)g(#4\)\(#5)g(#6\)\\cosa\\sina)168 +314 y(\\rmove)g(\(0)g(0\))168 366 y(\\bsegment)215 418 +y(\\drawdim)g(in)h(\\setsegscale)e(0.05)215 470 y(\\move)i(\({-\\cosa}) +e(-\\sina\))47 b(\\avec)23 b(\(0)h(0\))168 522 y(\\esegment})62 +649 y Ft(Note)19 b(the)g(use)h(of)f(macros)f(as)h(argumen)o(ts)g(to)f +(a)h Fq(\\move)g Ft(command.)31 b(Min)o(us)20 b(signs)g(are)f(put)g(in) +h(fron)o(t)e(of)0 712 y(the)d(macros.)k(Ho)o(w)o(ev)o(er,)14 +b(the)h(v)m(alue)h(of)e(the)h(macro)g Fq(\\cosa)f Ft(or)g +Fq(\\sina)g Ft(could)i(b)q(e)g(negativ)o(e.)k(F)l(ortunately)l(,)14 +b(T)1890 722 y(E)1916 712 y(X)0 774 y(accepts)g(t)o(w)o(o)f(min)o(us)i +(signs)g(in)g(a)f(ro)o(w)f(and)i(in)o(terprets)f(the)g(result)h(as)f(p) +q(ositiv)o(e.)20 b(Note)14 b(that)g(the)g Fq(\\rmove)g(\(0)h(0\))0 +836 y Ft(command)h(b)q(efore)g(the)g(b)q(eginning)j(of)c(the)h(segmen)o +(t)g(ensures)h(that)e(the)h(Bezier)h(curv)o(e)g(is)f(strok)o(ed)g(b)q +(efore)g(the)0 899 y(arro)o(whead)e(is)i(dra)o(wn.)62 +1037 y(The)h(second)f(macro)g Fq(\\caw)f Ft(builds)j(on)e +Fq(\\cavec)p Ft(.)22 b(The)17 b(goal)f(is)g(to)g(pro)q(duce)h(a)f +(wiggly)g(v)o(ector)g(that)f(can)h(b)q(e)0 1099 y(used)g(as)f(a)f(p)q +(oin)o(ter)i(in)g(a)f(dra)o(wing.)20 b(Consider)c(the)f(follo)o(wing)h +(symmetrical)g(normalized)g(Bezier)g(curv)o(e.)120 1227 +y Fq(\\centertexdraw{)22 b(\\move)h(\(0)h(0\))f(\\cavec)g(\(1.4)h +(0.1\)\(-0.4)e(-0.1\)\(1)h(0\))h(})62 1365 y Ft(This)13 +b(curv)o(e)f(has)f(the)h(appropriate)g(wiggle.)20 b(No)o(w)11 +b(w)o(e)g(w)o(an)o(t)g(to)g(b)q(e)i(able)f(to)g(dra)o(w)f(this)h(curv)o +(e,)g(appropriately)0 1428 y(scaled)i(and)f(rotated.)18 +b(The)13 b(macro)f Fq(\\caw)g Ft(needs)i(to)e(do)h(computations)g(on)f +(the)h(co)q(ordinates.)20 b(First,)12 b Fq(\\caw)h Ft(uses)0 +1490 y(the)h(macros)f Fq(\\getpos)g Ft(and)h Fq(\\currentpos)e +Ft(to)h(get)h(the)f(p)q(ositions)i(of)f(the)g(end)g(and)g(start)f(of)g +(the)h(curv)o(e.)19 b(Next,)0 1552 y(the)e(length)g(of)f(the)h(v)o +(ector)f(is)h(calculated)h(using)f(the)g(macro)f Fq(\\vectlen)p +Ft(.)22 b(A)17 b(lo)q(cal)h(macro)e Fq(\\rotatecoord)e +Ft(is)0 1614 y(used)j(to)f(rotate)f(a)h(co)q(ordinate)h(pair)f(ab)q +(out)h(the)f(origin,)h(using)g(the)g(cosine)g(and)g(sine)g(of)f(the)g +(rotation)g(angle.)0 1677 y(The)i(v)o(ector)f(length)h(is)g(used)h(to)e +(scale)h(the)g(normalized)g(curv)o(e.)28 b(The)18 b(remaining)g(co)q +(de)h(dra)o(ws)e(the)g(rotated,)0 1739 y(normalized)f(curv)o(e.)120 +1867 y Fq(\\def\\caw)23 b(\(#1)g(#2\){)168 1919 y(\\currentpos)f +(\\xa\\ya)168 1971 y(\\cossin)h(\({\\xa})g(\\ya\)\(#1)g +(#2\)\\cosa\\sina)120 2074 y(\045)h(The)f(nominal)g(wiggly)g(curve)g +(is)h(\(0)f(0\))h(\(1+dx)f(dy\))h(\(-dx)f(-dy\))g(\(1)h(0\))120 +2126 y(\045)g(Find)f(the)g(rotated)g(offset)g(\(dx)h(dy\))f(->)h(\(du)f +(dv\))168 2178 y(\\rotatecoord)f(\(0.4)h(0.1\)\\cosa\\sina)f(\\du\\dv) +120 2282 y(\045)i(calculate)e(the)i(length)f(of)g(the)h(vector)168 +2334 y(\\vectlen)e(\({\\xa})i(\\ya\)\(#1)e(#2\)\\len)120 +2438 y(\045)i(draw)f(the)g(curve)h(in)f(normalized)g(units)168 +2489 y(\\bsegment)215 2541 y(\\setsegscale)g({\\len})215 +2593 y(\\realadd)g(\\cosa)g(\\du)h(\\tmpa)47 b(\\realadd)23 +b(\\sina)g(\\dv)g(\\tmpb)215 2645 y(\\cavec)g(\({\\tmpa})g +(\\tmpb\)\({-\\du})f(-\\dv\)\({\\cosa})g(\\sina\))p eop +%%Page: 38 40 +38 39 bop 0 -83 a Ft(38)1722 b(T)1793 -73 y(E)1819 -83 +y(Xdra)o(w)168 158 y Fq(\\esegment)168 210 y(\\move)23 +b(\(#1)g(#2\)})120 314 y(\045)h(rotate)f(a)g(coordinate)g(\(x)h(y\))120 +366 y(\045)g(arguments:)e(\(x)i(y\))f(cosa)h(sina)f(x')h(y')120 +418 y(\045)48 b(x')23 b(=)h(cosa)f(*)h(x)g(-)f(sina)h(*)f(y;)48 +b(y')23 b(=)h(sina)g(*)f(x)h(+)g(cosa)f(*)h(y)120 470 +y(\\def\\rotatecoord)e(\(#1)h(#2\)#3#4#5#6{)168 522 y(\\getpos)g(\(#1)g +(#2\)\\xarg\\yarg)168 573 y(\\realmult)f(\\xarg)i({#3})f(\\tmpa)47 +b(\\realmult)23 b(\\yarg)g({#4})g(\\tmpb)168 625 y(\\realadd)f(\\tmpa)i +({-\\tmpb})e(#5)168 677 y(\\realmult)g(\\xarg)i({#4})f(\\tmpa)47 +b(\\realmult)23 b(\\yarg)g({#3})g(\\tmpb)168 729 y(\\realadd)f(\\tmpa)i +(\\tmpb)f(#6})62 866 y Ft(Finally)l(,)17 b(the)e(new)g(macro)g(can)g(b) +q(e)h(used)g(as)f(follo)o(ws.)120 993 y Fq(\\centertexdraw{)168 +1045 y(\\arrowheadtype)22 b(t:W)168 1096 y(\\move)h(\(0)g(0\))168 +1148 y(\\cavec)g(\(1.4)g(0.1\)\(-0.4)g(-0.1\)\(1)g(0\))168 +1200 y(\\move)g(\(1)g(0\))h(\\caw)f(\(1)h(1\))g(\\htext{tip)e(at)i +(\\tt)f(\(1)h(1\)})168 1252 y(\\move)f(\(1)g(0\))h(\\caw)f(\(2)h(1\))g +(\\htext{tip)e(at)i(\\tt)f(\(2)h(1\)})168 1304 y(\\move)f(\(1)g(0\))h +(\\caw)f(\(2)h(0\))g(\\htext{tip)e(at)i(\\tt)f(\(2)h(0\)})120 +1408 y(})62 1545 y Ft(Note)17 b(that)f(the)h(Bezier)i(curv)o(e)e(in)h +(the)f(macro)f Fq(\\cavec)g Ft(lies)i(b)q(elo)o(w)g(the)f(arro)o +(whead.)25 b(The)17 b(example)h(then)0 1607 y(dra)o(ws)c(an)i(arro)o +(whead)e(of)h(t)o(yp)q(e)g Fq(W)g Ft(to)f(erase)h(the)h(part)e(of)h +(the)g(line)i(b)q(elo)o(w)f(the)f(arro)o(whead.)p eop +%%Page: 39 41 +39 40 bop 0 -83 a Ft(App)q(endix)17 b(C:)e(Examples)1445 +b(39)0 158 y Fp(App)r(endix)13 b(C)41 b(Examples)62 345 +y Ft(This)16 b(app)q(endix)h(sho)o(ws)e(examples)h(of)e(the)i(use)f(of) +g(T)975 355 y(E)1000 345 y(Xdra)o(w.)0 570 y Fs(C.1)32 +b(Blo)r(c)n(k)16 b(diagram)g(of)e(a)h(lattice)h(\014lter)62 +707 y Ft(The)h(blo)q(c)o(k)g(diagram)e(of)h(a)g(lattice)h(\014lter)f +(uses)h(a)f(library)g(of)g(extended)h(commands)f(built)i(from)d(the)h +(basic)0 769 y(T)25 779 y(E)51 769 y(Xdra)o(w)e(commands.)163 +1250 y @beginspecial 4 @hoffset 43 @voffset @setspecial +%%BeginDocument: texdraw.p11 +50 dict begin +/mv {stroke moveto} def +/lv {lineto} def +/st {currentpoint stroke moveto} def +/sl {st setlinewidth} def +/sd {st 0 setdash} def +/sg {st setgray} def +/bs {gsave} def /es {stroke grestore} def +/fl {gsave setgray fill grestore + currentpoint newpath moveto} def +/fp {gsave setgray fill grestore st} def +/cv {curveto} def +/cr {gsave currentpoint newpath 3 -1 roll 0 360 arc + stroke grestore} def +/fc {gsave setgray currentpoint newpath + 3 -1 roll 0 360 arc fill grestore} def +/ar {gsave currentpoint newpath 5 2 roll arc stroke grestore} def +/el {gsave /svm matrix currentmatrix def + currentpoint translate scale newpath 0 0 1 0 360 arc + svm setmatrix stroke grestore} def +/fe {gsave setgray currentpoint translate scale newpath + 0 0 1 0 360 arc fill grestore} def +/av {/hhwid exch 2 div def /hlen exch def + /ah exch def /tipy exch def /tipx exch def + currentpoint /taily exch def /tailx exch def + /dx tipx tailx sub def /dy tipy taily sub def + /alen dx dx mul dy dy mul add sqrt def + /blen alen hlen sub def + gsave tailx taily translate dy dx atan rotate + (V) ah ne {blen 0 gt {blen 0 lineto} if} {alen 0 lineto} ifelse + stroke blen hhwid neg moveto alen 0 lineto blen hhwid lineto + (T) ah eq {closepath} if + (W) ah eq {gsave 1 setgray fill grestore closepath} if + (F) ah eq {fill} {stroke} ifelse + grestore tipx tipy moveto} def +0.24 0.24 scale +1 setlinecap 1 setlinejoin +3 setlinewidth [] 0 setdash +0 0 moveto +bs +0 0 mv +90 0 lv +6 0 fc +90 120 lv +90 0 mv +90 -120 lv +es +bs +90 120 mv +576 120 (F) 24 12 av +600 120 mv +24 cr +bs +588 120 mv +612 120 lv +600 108 mv +600 132 lv +es +624 120 mv +720 120 (F) 24 12 av +90 -120 mv +210 -120 (F) 24 12 av +bs +210 -75 lv +300 -75 lv +300 -165 lv +210 -165 lv +210 -120 lv +es +300 -120 mv +576 -120 (F) 24 12 av +600 -120 mv +24 cr +bs +588 -120 mv +612 -120 lv +600 -132 mv +600 -108 lv +es +624 -120 mv +720 -120 (F) 24 12 av +360 120 mv +6 0 fc +583 -103 (F) 24 12 av +360 -120 mv +6 0 fc +583 103 (F) 24 12 av +120 126 mv +es +bs +900 120 mv +1386 120 (F) 24 12 av +1410 120 mv +24 cr +bs +1398 120 mv +1422 120 lv +1410 108 mv +1410 132 lv +es +1434 120 mv +1590 120 (F) 24 12 av +900 -120 mv +1020 -120 (F) 24 12 av +bs +1020 -75 lv +1110 -75 lv +1110 -165 lv +1020 -165 lv +1020 -120 lv +es +1110 -120 mv +1386 -120 (F) 24 12 av +1410 -120 mv +24 cr +bs +1398 -120 mv +1422 -120 lv +1410 -132 mv +1410 -108 lv +es +1434 -120 mv +1530 -120 (F) 24 12 av +1170 120 mv +6 0 fc +1393 -103 (F) 24 12 av +1170 -120 mv +6 0 fc +1393 103 (F) 24 12 av +930 126 mv +es +stroke end showpage +%%EndDocument + @endspecial 74 1082 a Fl(x)p Ft(\()p Fl(n)p Ft(\))729 +926 y Fi(+)769 1003 y Fh(\000)402 1208 y Fl(z)425 1191 +y Fg(\000)p Fn(1)729 1224 y Fi(+)769 1147 y Fh(\000)249 +915 y Fl(f)271 922 y Fn(0)290 915 y Ft(\()p Fl(n)p Ft(\))466 +b Fl(f)841 922 y Fn(1)860 915 y Ft(\()p Fl(n)p Ft(\))250 +1242 y Fl(b)270 1249 y Fn(0)288 1242 y Ft(\()p Fl(n)p +Ft(\))j Fl(b)840 1249 y Fn(1)858 1242 y Ft(\()p Fl(n)p +Ft(\))616 1003 y Fl(K)655 1010 y Fn(1)616 1161 y Fl(K)655 +1168 y Fn(1)964 960 y Fr(\001)8 b(\001)g(\001)964 1200 +y(\001)g(\001)g(\001)1539 926 y Fi(+)1579 1003 y Fh(\000)1789 +962 y Fl(e)p Ft(\()p Fl(n)p Ft(\))1212 1208 y Fl(z)1235 +1191 y Fg(\000)p Fn(1)1539 1224 y Fi(+)1579 1147 y Fh(\000)1033 +915 y Fl(f)1055 922 y Fk(P)t Fg(\000)p Fn(1)1125 915 +y Ft(\()p Fl(n)p Ft(\))436 b Fl(f)1646 922 y Fk(P)1674 +915 y Ft(\()p Fl(n)p Ft(\))1034 1242 y Fl(b)1054 1249 +y Fk(P)t Fg(\000)p Fn(1)1124 1242 y Ft(\()p Fl(n)p Ft(\))j +Fl(b)1646 1249 y Fk(P)1673 1242 y Ft(\()p Fl(n)p Ft(\))1426 +1003 y Fl(K)1465 1010 y Fk(P)1426 1161 y Fl(K)1465 1168 +y Fk(P)62 1437 y Ft(The)16 b(blo)q(c)o(k)g(diagram)f(uses)h(a)f(\\dela) +o(y")g(blo)q(c)o(k.)22 b(This)16 b(is)g(de\014ned)h(as)e(a)g(segmen)o +(t)g(whic)o(h)h(lea)o(v)o(es)g(the)f(curren)o(t)0 1499 +y(p)q(osition)21 b(at)e(the)h(end)h(of)e(this)i(blo)q(c)o(k.)34 +b(A)20 b(second)h(macro,)f Fq(\\bdot)p Ft(,)g(dra)o(ws)f(a)g(\\big")h +(dot)g(whic)o(h)h(is)f(used)h(to)0 1562 y(mark)e(junctions)h(of)f +(lines.)34 b(The)20 b Fq(\\Ttext)f Ft(command)g(cen)o(ters)g(text)g(ab) +q(o)o(v)o(e)g(a)g(giv)o(en)h(p)q(oin)o(t.)33 b(The)20 +b(o\013set)f(to)0 1624 y(p)q(osition)d(the)e(text)h(is)g(lo)q(cal)g(to) +f(a)h(segmen)o(t,)f(resulting)h(in)h(no)e(c)o(hange)h(to)f(the)h +(curren)o(t)f(p)q(oin)o(t.)21 b(Similar)16 b(macros)0 +1686 y(to)e(p)q(osition)i(text)f(b)q(elo)o(w)g(a)g(p)q(oin)o(t)g(\()p +Fq(\\Btext)p Ft(\),)e(to)h(the)h(left)h(of)e(a)h(p)q(oin)o(t)g(\()p +Fq(\\Ltext)p Ft(\))e(and)j(to)e(the)h(righ)o(t)f(of)h(a)f(p)q(oin)o(t)0 +1748 y(\()p Fq(\\Rtext)p Ft(\))g(are)h(used)g(in)h(the)g(\014nal)g(dra) +o(wing.)120 1875 y Fq(\\def\\delay)22 b({\\bsegment)454 +1927 y(\\setsegscale)g(0.3)454 1979 y(\\lvec)h(\(0)h(+0.5\))f(\\lvec)g +(\(1)h(+0.5\))f(\\lvec)g(\(1)h(-0.5\))454 2031 y(\\lvec)f(\(0)h(-0.5\)) +f(\\lvec)g(\(0)h(0\))454 2083 y(\\textref)f(h:C)g(v:C)48 +b(\\htext)23 b(\(0.5)g(0\){$z^{-1}$})454 2134 y(\\savepos)g(\(1)g +(0\)\(*ex)g(*ey\))406 2186 y(\\esegment)406 2238 y(\\move)h(\(*ex)f +(*ey\)})120 2290 y(\\def\\bdot)g({\\fcir)g(f:0)g(r:0.02)g(})120 +2342 y(\\def\\Ttext)f(#1{\\bsegment)502 2394 y(\\textref)h(h:C)g(v:B)47 +b(\\htext)23 b(\(0)h(+0.06\){#1})454 2446 y(\\esegment})62 +2583 y Ft(Sev)o(eral)19 b(of)f(the)h(blo)q(c)o(k)g(diagram)f(elemen)o +(ts)i(scale)f(with)g(the)f(size)i(of)e(the)g(summing)h(no)q(des.)31 +b(The)18 b(radius)0 2645 y(of)e(the)h(circles)i(for)d(the)h(summing)g +(no)q(des)h(is)f(de\014ned)h(as)f(the)g(macro)f Fq(\\cradius)p +Ft(.)23 b(The)18 b(summing)f(no)q(des)g(will)p eop +%%Page: 40 42 +40 41 bop 0 -83 a Ft(40)1722 b(T)1793 -73 y(E)1819 -83 +y(Xdra)o(w)0 158 y(ha)o(v)o(e)15 b(enclosed)j(plus)f(signs,)f +(appropriately)g(scaled.)23 b(The)16 b(plus)h(sign)f(is)g(dra)o(wn)g(b) +o(y)g(the)g(macro)f Fq(\\pluss)p Ft(.)21 b(The)0 221 +y(macro)15 b Fq(\\pcir)g Ft(dra)o(ws)g(b)q(oth)h(the)g(circle)h(and)f +(the)g(plus)g(sign.)22 b(The)16 b(incoming)h(lines)g(to)e(a)h(summing)g +(no)q(de)g(will)0 283 y(b)q(e)f(lab)q(elled)h(with)f(plus)g(or)e(min)o +(us)i(signs)f(\(c)o(haracters)f(this)h(time\),)g(placed)h(at)f(the)g +(appropriate)g(p)q(osition)h(with)0 345 y(resp)q(ect)d(to)e(the)i(cen)o +(ter)f(of)g(the)g(summing)h(no)q(de.)19 b(These)12 b(p)q(ositions)g +(are)f(giv)o(en)h(in)g(terms)e(of)h(compass)g(directions.)0 +407 y(The)k(macro)g Fq(\\putwnw)f Ft(places)i(text)f(w)o(est)f(b)o(y)i +(north-w)o(est)e(relativ)o(e)i(to)e(the)i(cen)o(ter)f(of)g(the)g +(summing)h(no)q(de.)120 539 y Fq(\\def\\cradius)22 b({0.08})120 +591 y(\\def\\pluss)g({\\bsegment)478 643 y(\\setsegscale)g({\\cradius}) +478 694 y(\\move)h(\(-0.5)g(0\))h(\\lvec)f(\(+0.5)g(0\))478 +746 y(\\move)g(\(0)h(-0.5\))f(\\lvec)g(\(0)h(+0.5\))430 +798 y(\\esegment})120 850 y(\\def\\pcir)f({\\lcir)g(r:{\\cradius})f +(\\pluss})120 902 y(\\def\\puttext)g(\(#1)i(#2\)#3{\\bsegment)717 +954 y(\\setsegscale)e({\\cradius})717 1006 y(\\textref)g(h:C)i(v:C)f +(\\htext)g(\(#1)h(#2\){#3})669 1058 y(\\esegment})120 +1110 y(\\def\\putwnw)e(#1{\\puttext)h(\(-1.7)g(+1.2\){#1}})62 +1251 y Ft(The)17 b(blo)q(c)o(k)g(diagram)f(has)h(v)o(ectors)e(arriving) +j(and)e(departing)h(from)f(the)g(summing)h(no)q(des)h(\(circles\).)24 +b(One)0 1314 y(could)c(calculate)g(the)f(p)q(oin)o(ts)g(of)f(in)o +(tersection)i(of)e(the)h(lines)h(with)g(the)e(circles,)j(and)e(then)g +(en)o(ter)g(the)g(v)m(alues)0 1376 y(in)o(to)e(the)g(T)199 +1386 y(E)225 1376 y(Xdra)o(w)g(co)q(de.)26 b(Ho)o(w)o(ev)o(er,)16 +b(in)i(this)g(example,)g(w)o(e)f(implemen)o(t)i(an)e(automated)f(pro)q +(cedure.)27 b(Tw)o(o)0 1438 y(macros)12 b(are)g(needed,)i(an)f(arro)o +(w)e(v)o(ector)h(to)f(a)i(circle)h(\()p Fq(\\avectoc)p +Ft(\))d(and)h(an)h(arro)o(w)e(v)o(ector)h(lea)o(ving)h(from)f(a)g +(circle)0 1500 y(\()p Fq(\\avecfrc)p Ft(\).)17 b(The)d(macros)f(will)i +(calculate)f(the)g(p)q(oin)o(t)g(of)f(in)o(tersection)h(with)g(the)f +(circle)i(and)f(start)e(or)h(end)h(the)0 1563 y(v)o(ector)g(at)h(the)g +(in)o(tersection)h(p)q(oin)o(t.)62 1704 y(The)c(arro)o(w)f(macros)g +(use)h(scaling)g(and)g(relativ)o(e)h(p)q(ositioning)g(inside)h(of)d(a)g +(dra)o(wing)h(segmen)o(t.)18 b(In)13 b(the)f(case)f(of)0 +1767 y(the)i(macro)g Fq(\\avectoc)p Ft(,)f(a)h(mo)o(v)o(e)g(is)h(made)f +(to)g(the)g(\014nal)i(p)q(oin)o(t)f(\(cen)o(ter)f(of)g(the)g(circle\),) +i(then)e(within)i(a)e(dra)o(wing)0 1829 y(segmen)o(t,)i(a)g(scaled)i +(mo)o(v)o(e)e(is)h(made)g(bac)o(k)f(to)o(w)o(ards)f(the)i(initial)i(p)q +(oin)o(t)e(to)f(determine)i(the)f(in)o(tersection)g(p)q(oin)o(t)0 +1891 y(with)g(the)f(circle.)120 2022 y Fq(\\def\\avectoc)22 +b(\(#1)i(#2\){\\currentpos)d(\\xa\\ya)621 2074 y(\\cossin)i(\({\\xa})g +(\\ya\)\(#1)g(#2\)\\cosa\\sina)621 2126 y(\\savepos)g(\(#1)g(#2\)\(*tx) +g(*ty\))621 2178 y(\\bsegment)669 2230 y(\\move)g(\(*tx)g(*ty\))669 +2282 y(\\setsegscale)f({\\cradius})669 2334 y(\\rmove)h(\({-\\cosa})g +(-\\sina\))669 2386 y(\\savecurrpos)f(\(*ex)h(*ey\))621 +2438 y(\\esegment)621 2489 y(\\avec)g(\(*ex)h(*ey\))621 +2541 y(\\move)f(\(#1)h(#2\)})120 2593 y(\\def\\avecfrc)e(\(#1)i +(#2\){\\currentpos)d(\\xa\\ya)621 2645 y(\\cossin)i(\({\\xa})g +(\\ya\)\(#1)g(#2\)\\cosa\\sina)p eop +%%Page: 41 43 +41 42 bop 0 -83 a Ft(App)q(endix)17 b(C:)e(Examples)1445 +b(41)621 158 y Fq(\\bsegment)669 210 y(\\setsegscale)22 +b({\\cradius})669 262 y(\\move)h(\({\\cosa})g(\\sina\))669 +314 y(\\savecurrpos)f(\(*ex)h(*ey\))621 366 y(\\esegment)621 +418 y(\\move)g(\(*ex)h(*ey\))621 470 y(\\avec)f(\(#1)h(#2\)})62 +618 y Ft(Ha)o(ving)12 b(de\014ned)h(these)f(macros,)f(w)o(e)h(are)f +(ready)h(to)f(dra)o(w)g(the)h(blo)q(c)o(k)g(diagram.)19 +b(The)12 b(\014rst)f(and)h(last)f(sections)0 680 y(of)h(the)h(lattice)g +(\014lter)h(are)e(v)o(ery)g(similar,)i(di\013ering)g(mainly)g(in)f(the) +g(text)f(lab)q(els.)21 b(With)13 b(more)f(e\013ort,)g(co)q(de)h(could)0 +743 y(b)q(e)j(shared)f(b)q(et)o(w)o(een)h(the)f(commands)g(used)h(to)e +(dra)o(w)h(these)g(blo)q(c)o(ks.)120 881 y Fq(\\centertexdraw{)120 +933 y(\\drawdim)23 b(in)120 985 y(\\arrowheadtype)f(t:F)47 +b(\\arrowheadsize)22 b(l:0.08)h(w:0.04)120 1037 y(\\def\\pl)g +({$\\scriptscriptstyle)e(+$})i(\\def\\mn)g({$\\scriptscriptstyle)f(-$}) +120 1140 y(\\move)h(\(0)h(+0.63\))f(\\move)g(\(0)h(-0.60\))f(\\move)g +(\(0)g(0\))h(\045)g(compensate)e(for)i(the)f(text)g(size)120 +1244 y(\045)h(Input)f(to)g(the)h(first)f(stage)120 1296 +y(\\bsegment)168 1348 y(\\Ltext{$x\(n\)$})168 1400 y(\\lvec)g(\(0.3)g +(0\))h(\\bdot)f(\\lvec)g(\(0.3)g(+0.4\))h(\\move)f(\(0.3)g(0\))h +(\\lvec)f(\(0.3)g(-0.4\))168 1452 y(\\savepos)f(\(0.3)i(0\)\(*ex)f +(*ey\))120 1504 y(\\esegment)120 1555 y(\\move)g(\(*ex)g(*ey\))120 +1659 y(\045)h(first)f(lattice)g(stage)120 1711 y(\\bsegment)168 +1763 y(\\move)g(\(0)g(+0.4\))48 b(\\avectoc)22 b(\(1.7)i(+0.4\))168 +1815 y(\\pcir)f(\\putwnw{\\pl})f(\\puts{\\mn})168 1867 +y(\\avecfrc)g(\(2.1)i(+0.4\))168 1919 y(\\move)f(\(0)g(-0.4\))48 +b(\\avec)23 b(\(0.4)g(-0.4\))g(\\delay)g(\\avectoc)g(\(1.7)g(-0.4\))168 +1971 y(\\pcir)g(\\putwsw{\\pl})f(\\putn{\\mn})168 2022 +y(\\avecfrc)g(\(2.1)i(-0.4\))168 2074 y(\\move)f(\(0.9)g(+0.4\))47 +b(\\bdot)g(\\avectoc)23 b(\(1.7)g(-0.4\))168 2126 y(\\move)g(\(0.9)g +(-0.4\))47 b(\\bdot)g(\\avectoc)23 b(\(1.7)g(+0.4\))168 +2178 y(\\move)g(\(0.1)g(+0.42\))g(\\Ttext)g({$f_0\(n\)$})168 +2230 y(\\move)g(\(2.0)g(+0.42\))g(\\Ttext)g({$f_1\(n\)$})168 +2282 y(\\move)g(\(0.1)g(-0.4\))47 b(\\Btext)23 b({$b_0\(n\)$})168 +2334 y(\\move)g(\(2.0)g(-0.4\))47 b(\\Btext)23 b({$b_1\(n\)$})168 +2386 y(\\textref)f(h:L)i(v:B)47 b(\\htext)23 b(\(1.15)g(+0.2\){$K_1$}) +168 2438 y(\\textref)f(h:L)i(v:T)47 b(\\htext)23 b(\(1.15)g +(-0.2\){$K_1$})168 2489 y(\\savepos)f(\(2.1)i(0\)\(*ex)f(*ey\))120 +2541 y(\\esegment)120 2593 y(\\move)g(\(*ex)g(*ey\))p +eop +%%Page: 42 44 +42 43 bop 0 -83 a Ft(42)1722 b(T)1793 -73 y(E)1819 -83 +y(Xdra)o(w)120 158 y Fq(\045)24 b(center)f(section)120 +210 y(\\bsegment)168 262 y(\\textref)f(h:C)i(v:C)f(\\htext)g(\(0.3)h +(+0.4\){$\\cdots$})168 314 y(\\htext)f(\(0.3)g(-0.4\){$\\cdots$})168 +366 y(\\savepos)f(\(0.6)i(0\)\(*ex)f(*ey\))120 418 y(\\esegment)120 +470 y(\\move)g(\(*ex)g(*ey\))120 573 y(\045)h(last)f(lattice)g(stage) +120 625 y(\\bsegment)168 677 y(\\move)g(\(0)g(+0.4\))48 +b(\\avectoc)22 b(\(1.7)i(+0.4\))168 729 y(\\pcir)f(\\putwnw{\\pl})f +(\\puts{\\mn})168 781 y(\\avecfrc)g(\(2.3)i(+0.4\))f(\\Rtext{$e\(n\)$}) +168 833 y(\\move)g(\(0)g(-0.4\))48 b(\\avec)23 b(\(0.4)g(-0.4\))g +(\\delay)g(\\avectoc)g(\(1.7)g(-0.4\))168 885 y(\\pcir)g +(\\putwsw{\\pl})f(\\putn{\\mn})168 937 y(\\avecfrc)g(\(2.1)i(-0.4\))168 +989 y(\\move)f(\(0.9)g(+0.4\))47 b(\\bdot)g(\\avectoc)23 +b(\(1.7)g(-0.4\))168 1040 y(\\move)g(\(0.9)g(-0.4\))47 +b(\\bdot)g(\\avectoc)23 b(\(1.7)g(+0.4\))168 1092 y(\\move)g(\(0.1)g +(+0.42\))g(\\Ttext)g({$f_{P-1}\(n\)$})168 1144 y(\\move)g(\(2.0)g +(+0.42\))g(\\Ttext)g({$f_P\(n\)$})168 1196 y(\\move)g(\(0.1)g(-0.4\))47 +b(\\Btext)23 b({$b_{P-1}\(n\)$})168 1248 y(\\move)g(\(2.0)g(-0.4\))47 +b(\\Btext)23 b({$b_P\(n\)$})168 1300 y(\\textref)f(h:L)i(v:B)47 +b(\\htext)23 b(\(1.15)g(+0.2\){$K_P$})168 1352 y(\\textref)f(h:L)i(v:T) +47 b(\\htext)23 b(\(1.15)g(-0.2\){$K_P$})120 1404 y(\\esegment)120 +1456 y(})62 1638 y Ft(The)c(macros)g(used)g(in)h(this)f(example)h(are)f +(similar)h(to)e(the)h(blo)q(c)o(k)h(diagram)f(macros)f(de\014ned)i(in)g +(the)f(\014le)0 1701 y(`)p Fq(blockdiagram.tex)p Ft('.)0 +2338 y Fs(C.2)32 b(Filter)18 b(resp)r(onse)c(graph)62 +2521 y Ft(This)k(example)g(sho)o(ws)f(the)h(resp)q(onse)f(of)g(a)g +(canonical)i(\014lter.)27 b(T)1201 2530 y(E)1227 2521 +y(Xdra)o(w)16 b(is)i(not)f(w)o(ell)h(suited)h(for)d(general)0 +2583 y(purp)q(ose)k(graphing)g(|)g(it)f(has)h(no)f(co)q(ordinate)h +(translation)f(facilit)o(y)i(nor)e(do)q(es)g(it)h(ha)o(v)o(e)f +(separate)g Fo(x)j Ft(and)e Fo(y)0 2645 y Ft(scaling.)h(Nonetheless,)16 +b(for)e(certain)i(simple)h(graphs,)d(T)976 2655 y(E)1002 +2645 y(Xdra)o(w)g(is)i(adequate.)p eop +%%Page: 43 45 +43 44 bop 0 -83 a Ft(App)q(endix)17 b(C:)e(Examples)1445 +b(43)615 492 y @beginspecial 0 @hoffset 23 @voffset @setspecial +%%BeginDocument: texdraw.p12 +50 dict begin +/mv {stroke moveto} def +/lv {lineto} def +/st {currentpoint stroke moveto} def +/sl {st setlinewidth} def +/sd {st 0 setdash} def +/sg {st setgray} def +/bs {gsave} def /es {stroke grestore} def +/fl {gsave setgray fill grestore + currentpoint newpath moveto} def +/fp {gsave setgray fill grestore st} def +/cv {curveto} def +/cr {gsave currentpoint newpath 3 -1 roll 0 360 arc + stroke grestore} def +/fc {gsave setgray currentpoint newpath + 3 -1 roll 0 360 arc fill grestore} def +/ar {gsave currentpoint newpath 5 2 roll arc stroke grestore} def +/el {gsave /svm matrix currentmatrix def + currentpoint translate scale newpath 0 0 1 0 360 arc + svm setmatrix stroke grestore} def +/fe {gsave setgray currentpoint translate scale newpath + 0 0 1 0 360 arc fill grestore} def +/av {/hhwid exch 2 div def /hlen exch def + /ah exch def /tipy exch def /tipx exch def + currentpoint /taily exch def /tailx exch def + /dx tipx tailx sub def /dy tipy taily sub def + /alen dx dx mul dy dy mul add sqrt def + /blen alen hlen sub def + gsave tailx taily translate dy dx atan rotate + (V) ah ne {blen 0 gt {blen 0 lineto} if} {alen 0 lineto} ifelse + stroke blen hhwid neg moveto alen 0 lineto blen hhwid lineto + (T) ah eq {closepath} if + (W) ah eq {gsave 1 setgray fill grestore closepath} if + (F) ah eq {fill} {stroke} ifelse + grestore tipx tipy moveto} def +0.24 0.24 scale +1 setlinecap 1 setlinejoin +3 setlinewidth [] 0 setdash +0 0 moveto +0 0 mv +0 420 (F) 24 12 av +0 0 mv +660 0 (F) 24 12 av +0 0 mv +bs +0 15 lv +es +bs +240 0 mv +240 15 lv +es +bs +360 0 mv +360 15 lv +es +bs +480 0 mv +480 15 lv +es +7 sl +0 300 mv +120 300 lv +132 299 lv +144 296 lv +156 292 lv +168 285 lv +180 277 lv +192 267 lv +204 256 lv +216 243 lv +228 228 lv +240 212 lv +252 195 lv +264 176 lv +276 157 lv +288 136 lv +300 115 lv +312 93 lv +324 70 lv +336 47 lv +348 23 lv +360 0 lv +570 0 lv +stroke end showpage +%%EndDocument + @endspecial 1299 406 a Fl(!)603 440 y Ft(0)841 430 y +Fl(\031)p 822 451 65 2 v 822 492 a Ft(2)p Fl(N)952 430 +y(!)980 437 y Fk(s)1081 430 y Fl(\031)p 1074 451 42 2 +v 1074 492 a(N)62 681 y Ft(In)19 b(this)g(example,)h(macro)d +Fq(\\ticklab)h Ft(places)h(a)f(lab)q(elled)j(axis)e(tic)o(k)f(at)g(a)g +(giv)o(en)h(p)q(osition.)30 b(The)19 b(data)e(is)0 743 +y(sp)q(eci\014ed)k(in)f(a)e(straigh)o(tforw)o(ard)f(manner,)j(ha)o +(ving)f(b)q(een)h(scaled)g(b)q(eforehand)f(to)g(giv)o(e)g(the)g +(desired)h(asp)q(ect)0 806 y(ratio)15 b(for)f(the)i(graph.)120 +933 y Fq(\\centertexdraw{)120 985 y(\\arrowheadtype)22 +b(t:F)47 b(\\arrowheadsize)22 b(l:0.08)h(w:0.04)120 1037 +y(\\def\\ds)g({\\displaystyle})120 1088 y(\\def\\ticklab)f(\(#1)i +(#2\)#3{\\move\(#1)e(#2\))669 1140 y(\\bsegment)717 1192 +y(\\lvec)h(\(0)g(0.05\))717 1244 y(\\textref)f(h:C)i(v:T)f(\\htext)g +(\(0)h(-0.05\){#3})669 1296 y(\\esegment})120 1348 y(\\def\\Rtext)e +(#1{\\bsegment)502 1400 y(\\textref)h(h:L)g(v:C)g(\\htext)h(\(+0.08)f +(0\){#1})454 1452 y(\\esegment})120 1555 y(\\move)g(\(2.4)g(-0.3\))95 +b(\045)24 b(move)f(to)h(set)f(the)h(size)120 1659 y(\\move)f(\(0)h(0\)) +120 1711 y(\045)g(Axes)120 1763 y(\\avec)f(\(0)h(+1.4\))120 +1815 y(\\move)f(\(0)h(0\))f(\\avec)h(\(2.2)f(0\))g(\\Rtext{$\\omega$}) +120 1867 y(\\ticklab)g(\(0)g(0\))72 b({0})120 1919 y(\\ticklab)23 +b(\(0.8)g(0\))h({$\\ds)f({\\pi)g(\\over)g(2N})h($})120 +1971 y(\\ticklab)f(\(1.2)g(0\))h({$\\omega_s$})120 2022 +y(\\ticklab)f(\(1.6)g(0\))h({$\\ds)f({\\pi)g(\\over)g(N})h($})120 +2126 y(\\linewd)f(0.025)120 2178 y(\\move)g(\(0)h(1\))120 +2230 y(\\lvec)f(\(0.4)g(1\))120 2282 y(\\lvec)g(\(0.44)g(0.998\))120 +2334 y(\\lvec)g(\(0.48)g(0.988\))120 2386 y(\\lvec)g(\(0.52)g(0.973\)) +120 2438 y(\\lvec)g(\(0.56)g(0.951\))144 2489 y(...)120 +2541 y(\\lvec)g(\(1.08)g(0.233\))120 2593 y(\\lvec)g(\(1.12)g(0.156\)) +120 2645 y(\\lvec)g(\(1.16)g(0.078\))p eop +%%Page: 44 46 +44 45 bop 0 -83 a Ft(44)1722 b(T)1793 -73 y(E)1819 -83 +y(Xdra)o(w)120 158 y Fq(\\lvec)23 b(\(1.20)g(0\))120 +210 y(\\lvec)g(\(1.9)g(0\))120 262 y(})0 479 y Fs(C.3)32 +b(Geometric)16 b(construction)62 616 y Ft(This)j(example)h(sho)o(ws)d +(a)i(geometric)f(construction)h(whic)o(h)g(places)g(an)g(ellipse)i +(tangen)o(t)c(to)h(an)g(enclosing)0 678 y(circle.)34 +b(The)20 b(size)h(of)e(the)g(ellipse)j(is)e(determined)h(from)e +(geometric)g(considerations.)34 b(Macros)18 b(are)i(used)g(to)0 +740 y(mo)q(dularize)i(the)e(co)q(de.)36 b(The)20 b(example)h(alters)g +(the)f(unit)h(scale)g(factor.)34 b(This)21 b(allo)o(ws)f(the)g(dra)o +(wing)h(to)e(b)q(e)0 803 y(carried)d(out)f(in)h(units)f(normalized)i +(to)e(the)g(radius)h(of)e(the)i(circle.)504 1792 y @beginspecial +113 @hoffset 113 @voffset @setspecial +%%BeginDocument: texdraw.p13 +50 dict begin +/mv {stroke moveto} def +/lv {lineto} def +/st {currentpoint stroke moveto} def +/sl {st setlinewidth} def +/sd {st 0 setdash} def +/sg {st setgray} def +/bs {gsave} def /es {stroke grestore} def +/fl {gsave setgray fill grestore + currentpoint newpath moveto} def +/fp {gsave setgray fill grestore st} def +/cv {curveto} def +/cr {gsave currentpoint newpath 3 -1 roll 0 360 arc + stroke grestore} def +/fc {gsave setgray currentpoint newpath + 3 -1 roll 0 360 arc fill grestore} def +/ar {gsave currentpoint newpath 5 2 roll arc stroke grestore} def +/el {gsave /svm matrix currentmatrix def + currentpoint translate scale newpath 0 0 1 0 360 arc + svm setmatrix stroke grestore} def +/fe {gsave setgray currentpoint translate scale newpath + 0 0 1 0 360 arc fill grestore} def +/av {/hhwid exch 2 div def /hlen exch def + /ah exch def /tipy exch def /tipx exch def + currentpoint /taily exch def /tailx exch def + /dx tipx tailx sub def /dy tipy taily sub def + /alen dx dx mul dy dy mul add sqrt def + /blen alen hlen sub def + gsave tailx taily translate dy dx atan rotate + (V) ah ne {blen 0 gt {blen 0 lineto} if} {alen 0 lineto} ifelse + stroke blen hhwid neg moveto alen 0 lineto blen hhwid lineto + (T) ah eq {closepath} if + (W) ah eq {gsave 1 setgray fill grestore closepath} if + (F) ah eq {fill} {stroke} ifelse + grestore tipx tipy moveto} def +0.24 0.24 scale +1 setlinecap 1 setlinejoin +3 setlinewidth [] 0 setdash +0 0 moveto +3 sl +450 cr +-472 0 mv +472 0 lv +0 -472 mv +0 472 lv +0 0 mv +318 318 lv +6 0 fc +318 -318 mv +6 0 fc +225 0 mv +bs +196 362 el +6 0 fc +225 67 mv +bs +bs +225 44 mv +225 90 lv +es +421 67 (V) 24 12 av +bs +421 44 mv +421 90 lv +es +225 67 (V) 24 12 av +323 67 mv +es +bs +bs +-113 0 mv +-67 0 lv +es +-90 0 mv +-90 362 (V) 24 12 av +bs +-113 362 mv +-67 362 lv +es +-90 0 (V) 24 12 av +-90 181 mv +es +es +stroke end showpage +%%EndDocument + @endspecial 1303 993 a(X)932 1360 y(O)1179 1370 y Fl(\014)1205 +1377 y Fn(2)1225 1224 y Fr(j)p Fl(\014)1264 1231 y Fn(1)1282 +1224 y Ft(+)p Fl(\014)1343 1231 y Fn(3)1361 1224 y Fr(j)719 +1150 y(j)p Fl(\014)758 1157 y Fn(1)776 1150 y Fr(\000)p +Fl(\014)837 1157 y Fn(3)856 1150 y Fr(j)120 1919 y Fq(\\centertexdraw{) +120 1971 y(\\arrowheadtype)22 b(t:V)h(\\arrowheadsize)f(l:0.08)h +(w:0.04)120 2022 y(\\linewd)g(0.01)120 2074 y(\\setunitscale)f(1.5)286 +b(\045)24 b(circle)f(will)g(have)g(radius)g(1.5)h(inches)120 +2178 y(\\def\\Btext)e(#1{\\bsegment)502 2230 y(\\textref)h(h:C)g(v:T)g +(\\htext)h(\(0)f(-0.04\){#1})454 2282 y(\\esegment})120 +2334 y(\\def\\Ttext)f(#1{\\bsegment)502 2386 y(\\textref)h(h:C)g(v:B)g +(\\htext)h(\(0)f(+0.04\){#1})454 2438 y(\\esegment})120 +2489 y(\\def\\Ltext)f(#1{\\bsegment)502 2541 y(\\textref)h(h:R)g(v:C)g +(\\htext)h(\(-0.04)f(0\){#1})454 2593 y(\\esegment})120 +2645 y(\\def\\bdot)g({\\fcir)g(f:0)g(r:0.0133)g(})p eop +%%Page: 45 47 +45 46 bop 0 -83 a Ft(App)q(endix)17 b(C:)e(Examples)1445 +b(45)120 158 y Fq(\\def\\vtick)22 b({\\bsegment)454 210 +y(\\move)h(\(0)h(-0.05\))f(\\lvec)g(\(0)h(+0.05\))406 +262 y(\\esegment})120 314 y(\\def\\htick)e({\\bsegment)454 +366 y(\\move)h(\(-0.05)g(0\))h(\\lvec)f(\(+0.05)g(0\))406 +418 y(\\esegment})120 470 y(\\def\\Hlen)g(#1#2{\\bsegment)526 +522 y(\\vtick)g(\\avec)g(\({#1})g(0\))h(\\vtick)f(\\avec)g(\(0)g(0\)) +526 573 y(\\relsegscale)f(0.5)526 625 y(\\move)h(\({#1})g(0\))h +(\\Ttext)f({#2})478 677 y(\\esegment})120 729 y(\\def\\Vlen)g +(#1#2{\\bsegment)526 781 y(\\htick)g(\\avec)g(\(0)g({#1}\))h(\\htick)f +(\\avec)g(\(0)g(0\))526 833 y(\\relsegscale)f(0.5)526 +885 y(\\move)h(\(0)g({#1}\))h(\\Ltext)f({#2})478 937 +y(\\esegment})120 1040 y(\\lcir)g(r:1)596 b(\045)24 b(circle)120 +1092 y(\\move)f(\(-1.05)g(0\))h(\\lvec)f(\()h(1.05)f(0\))71 +b(\045)24 b(axes)120 1144 y(\\move)f(\(0)h(-1.05\))f(\\lvec)g(\(0)47 +b(1.05\))120 1248 y(\\move)23 b(\(0)h(0\))f(\\lvec)h(\(0.707)f(0.707\)) +g(\\bdot)120 1300 y(\\rmove)g(\(0.02)g(0.02\))g(\\textref)g(h:L)h(v:B)f +(\\htext)g({X})120 1352 y(\\move)g(\(0.707)g(-0.707\))g(\\bdot)120 +1404 y(\\textref)g(h:R)g(v:T)h(\\htext\(-0.02)e(-0.02\){O})120 +1507 y(\\move)h(\(0.5)g(0\))501 b(\045)24 b(center)f(of)h(ellipse)120 +1559 y(\\bsegment)168 1611 y(\\lellip)f(rx:0.435)f(ry:0.804)168 +1663 y(\\bdot)h(\\Btext)g({$\\beta_2$})168 1715 y(\\move)g(\(0)g +(0.15\))h(\\Hlen)f({0.435}{$|\\beta_1{+}\\beta)o(_3|$})168 +1767 y(\\move)g(\(-0.7)g(0\))h(\\Vlen)f({0.804}{$|\\beta_1{-}\\beta)o +(_3|$})120 1819 y(\\esegment)120 1871 y(})p eop +%%Page: 46 48 +46 47 bop 0 -83 a Ft(46)1722 b(T)1793 -73 y(E)1819 -83 +y(Xdra)o(w)p eop +%%Page: 47 49 +47 48 bop 0 -83 a Ft(App)q(endix)17 b(D:)e(Alphab)q(etic)i(listing)g +(of)e(commands)1003 b(47)0 158 y Fp(App)r(endix)13 b(D)41 +b(Alphab)r(etic)14 b(listing)f(of)j(commands)0 401 y +Fq(\\arrowheadsize)d(l:)p Fo(length)j Fq(w:)p Fo(width)240 +463 y Ft(Set)j(the)h(arro)o(whead)e(size)i(to)f(b)q(e)h +Fo(length)g Ft(units)g(long)g(and)f Fo(width)h Ft(units)g(wide.)33 +b(The)20 b(width)f(is)240 525 y(measured)d(across)e(the)i(\\base")f(of) +g(the)h(arro)o(whead.)j(The)d(initial)i(arro)o(whead)c(size)j(has)e(a)g +Fo(length)240 587 y Ft(of)g(0.16)f(inc)o(hes)i(and)f(a)g +Fo(width)h Ft(of)f(0.08)f(inc)o(hes.)0 689 y Fq(\\arrowheadtype)f(t:)p +Fo(t)o(yp)q(e)240 751 y Ft(Set)k(the)h(arro)o(whead)e(t)o(yp)q(e)h(to)g +Fo(t)o(yp)q(e)p Ft(,)g(where)h Fo(t)o(yp)q(e)i Ft(is)d(one)h(of)f +Fq(F)p Ft(,)g Fq(T)p Ft(,)g Fq(W)p Ft(,)g Fq(V)p Ft(,)g(or)g +Fq(H)p Ft(.)26 b(There)17 b(are)g(t)o(w)o(o)240 814 y(kinds)i(of)e +(arro)o(wheads.)27 b(The)18 b(\014rst)f(kind)i(is)f(a)f(triangle.)29 +b(There)18 b(are)f(3)g(v)m(arian)o(ts:)25 b(t)o(yp)q(e)18 +b Fq(T)g Ft(is)g(an)240 876 y(empt)o(y)e(triangle,)h(t)o(yp)q(e)g +Fq(F)f Ft(is)h(a)f(\014lled)j(triangle)e(\(using)g(the)g(curren)o(t)f +(gra)o(y)f(lev)o(el)j(for)e(lines\),)i(t)o(yp)q(e)240 +938 y Fq(W)e Ft(is)g(a)g(triangle)h(\014lled)h(with)e(white.)23 +b(The)17 b(second)f(kind)h(of)f(arro)o(whead)f(is)i(an)f(op)q(en)g +(ended)i(V)l(ee.)240 1000 y(There)c(are)f(2)h(v)m(arian)o(ts:)19 +b(t)o(yp)q(e)13 b Fq(V)h Ft(has)f(the)h(stem)f(con)o(tin)o(ue)i(to)e +(the)g(tip,)i(t)o(yp)q(e)e Fq(H)h Ft(has)f(the)h(stem)f(stop)240 +1063 y(at)i(the)g(base)g(of)g(the)g(arro)o(whead.)k(The)c(initial)j +(arro)o(whead)c(t)o(yp)q(e)h(is)h Fq(T)p Ft(.)0 1164 +y Fq(\\avec)e(\()p Fo(x)19 b(y)t Fq(\))240 1226 y Ft(Dra)o(w)c(a)i +(line)h(with)f(an)g(arro)o(whead)e(from)h(the)h(curren)o(t)g(p)q +(osition)g(to)f Fq(\()p Fo(x)i(y)t Fq(\))p Ft(.)24 b(The)17 +b(new)g(curren)o(t)240 1289 y(p)q(osition)f(is)g Fq(\()p +Fo(x)i(y)t Fq(\))p Ft(.)i(The)15 b(arro)o(whead)f(is)i(aligned)h(with)e +(the)g(line,)i(with)e(the)h(tip)f(at)g Fq(\()p Fo(x)j(y)t +Fq(\))p Ft(.)0 1390 y Fq(\\begin{texdraw})240 1452 y +Ft(Start)f(a)h(T)425 1462 y(E)450 1452 y(Xdra)o(w)f(dra)o(wing.)28 +b(The)18 b(dra)o(wing)g(is)h(terminated)f(with)g(an)g +Fq(\\end{texdraw})e Ft(com-)240 1515 y(mand.)k(This)c(command)f(is)h +(for)e(use)i(with)f(LaT)1068 1525 y(E)1094 1515 y(X.)0 +1616 y Fq(\\bsegment)240 1679 y Ft(Start)22 b(a)g(dra)o(wing)h(segmen)o +(t.)42 b(The)23 b(co)q(ordinate)g(system)f(is)i(shifted)f(suc)o(h)g +(that)f(the)h(curren)o(t)240 1741 y(p)q(osition)d(corresp)q(onds)g(to)f +(the)g(co)q(ordinate)h Fq(\(0)15 b(0\))p Ft(.)32 b(Changes)19 +b(to)f(scaling,)j(p)q(osition)g(and)e(line)240 1803 y(parameters)14 +b(sta)o(y)h(lo)q(cal)h(to)e(the)i(dra)o(wing)f(segmen)o(t.)0 +1905 y Fq(\\btexdraw)240 1967 y Ft(Start)f(a)h(T)419 +1977 y(E)445 1967 y(Xdra)o(w)f(dra)o(wing.)20 b(The)15 +b(dra)o(wing)h(is)f(terminated)h(with)f(an)g Fq(\\etexdraw)f +Ft(command.)0 2068 y Fq(\\centertexdraw)f({)i(...)g(})240 +2131 y Ft(Cen)o(ter)j(a)g(T)457 2140 y(E)482 2131 y(Xdra)o(w)g(b)q(o)o +(x.)29 b(The)18 b(argumen)o(t)f(con)o(tains)i(T)1255 +2140 y(E)1280 2131 y(Xdra)o(w)f(commands.)28 b(The)19 +b(resulting)240 2193 y(b)q(o)o(x)c(has)g(the)g(horizon)o(tal)h(size)g +Fq(\\hsize)e Ft(and)i(heigh)o(t)f(equal)h(to)f(the)g(heigh)o(t)h(of)f +(the)g(dra)o(wing.)0 2294 y Fq(\\clvec)f(\()p Fo(x1)19 +b(y1)t Fq(\)\()p Fo(x2)e(y2)t Fq(\)\()p Fo(x3)h(y3)t +Fq(\))240 2357 y Ft(Dra)o(w)9 b(a)i(Bezier)h(curv)o(e)f(from)f(the)g +(curren)o(t)h(p)q(osition)h(to)e(the)g(co)q(ordinate)i +Fq(\()p Fo(x3)18 b(y3)t Fq(\))10 b Ft(whic)o(h)h(b)q(ecomes)240 +2419 y(the)h(new)g(curren)o(t)g(p)q(osition.)20 b(The)13 +b(co)q(ordinates)f Fq(\()p Fo(x1)18 b(y1)t Fq(\))11 b +Ft(and)i Fq(\()p Fo(x2)18 b(y2)t Fq(\))11 b Ft(serv)o(e)h(as)g(con)o +(trol)g(p)q(oin)o(ts)240 2481 y(for)h(the)h(curv)o(e.)20 +b(Only)15 b(the)f(last)g(co)q(ordinate)g(giv)o(en)h(is)f(used)h(to)e +(up)q(date)i(the)f(size)h(of)e(the)h(dra)o(wing.)0 2583 +y Fq(\\drawbb)72 b Ft(Dra)o(w)16 b(a)i(ruled)h(b)q(o)o(x)e(around)h +(the)g(e\013ectiv)o(e)g(size)h(of)e(a)g(dra)o(wing)h(pro)q(duced)h(b)o +(y)e(T)1679 2593 y(E)1705 2583 y(Xdra)o(w)g(com-)240 +2645 y(mands.)p eop +%%Page: 48 50 +48 49 bop 0 -83 a Ft(48)1722 b(T)1793 -73 y(E)1819 -83 +y(Xdra)o(w)0 158 y Fq(\\drawdim)14 b Fo(dim)240 221 y +Ft(Set)j(the)h(units)g(to)e Fo(dim)p Ft(.)27 b(The)18 +b(argumen)o(t)e Fo(dim)i Ft(can)g(b)q(e)g(an)o(y)f(v)m(alid)i(T)1458 +230 y(E)1483 221 y(X)f(dimension)h(unit.)27 b(The)240 +283 y(units)16 b(are)g(used)g(to)f(in)o(terpret)h(co)q(ordinate)g(v)m +(alues.)23 b(Examples)16 b(of)f(v)m(alid)j(units:)j Fq(cm)p +Ft(,)15 b Fq(mm)p Ft(,)h Fq(in)p Ft(,)f Fq(pt)p Ft(,)240 +345 y(and)g Fq(bp)p Ft(.)0 434 y Fq(\\end{texdraw})240 +496 y Ft(End)k(a)g(T)407 506 y(E)433 496 y(Xdra)o(w)f(dra)o(wing)h +(started)f(with)i(a)e Fq(\\begin{texdraw})f Ft(command.)32 +b(The)19 b(resulting)240 558 y(T)265 568 y(E)291 558 +y(Xdra)o(w)12 b(dra)o(wing)h(is)g(placed)i(in)f(a)e(b)q(o)o(x)h(with)h +(heigh)o(t)f(equal)h(to)e(the)i(heigh)o(t)f(of)g(the)g(dra)o(wing)g +(and)240 620 y(width)i(equal)f(to)g(the)g(width)h(of)e(the)h(dra)o +(wing.)20 b(The)14 b(depth)h(of)e(the)i(b)q(o)o(x)e(is)i(zero.)k(This)c +(command)240 683 y(is)h(for)e(use)i(with)f(LaT)613 692 +y(E)639 683 y(X.)0 771 y Fq(\\esegment)240 833 y Ft(End)25 +b(a)f(dra)o(wing)g(segmen)o(t.)47 b(The)25 b(curren)o(t)f(p)q(osition)h +(in)h(e\013ect)e(b)q(efore)h(the)f(corresp)q(onding)240 +896 y Fq(\\bsegment)d Ft(command)h(is)h(restored.)41 +b(The)23 b(scaling)g(and)g(line)h(parameter)d(v)m(alues)j(rev)o(ert)e +(to)240 958 y(those)15 b(in)h(e\013ect)f(b)q(efore)g(the)h(corresp)q +(onding)g Fq(\\bsegment)e Ft(w)o(as)g(in)o(v)o(ok)o(ed.)0 +1046 y Fq(\\etexdraw)240 1108 y Ft(End)h(a)f(T)398 1118 +y(E)423 1108 y(Xdra)o(w)g(dra)o(wing)h(started)e(with)i(a)f +Fq(\\btexdraw)f Ft(command.)20 b(The)15 b(resulting)g(T)1793 +1118 y(E)1819 1108 y(Xdra)o(w)240 1171 y(dra)o(wing)i(is)h(placed)h(in) +f(a)f(b)q(o)o(x)g(with)h(heigh)o(t)f(equal)h(to)f(the)h(heigh)o(t)f(of) +g(the)h(dra)o(wing)f(and)g(width)240 1233 y(equal)f(to)f(the)g(width)h +(of)e(the)i(dra)o(wing.)j(The)d(depth)g(of)e(the)i(b)q(o)o(x)f(is)h +(zero.)0 1321 y Fq(\\everytexdraw)d({)i(...)g(})240 1384 +y Ft(Sp)q(ecify)d(T)418 1393 y(E)444 1384 y(Xdra)o(w)d(commands)i(to)e +(b)q(e)j(executed)f(at)f(the)g(b)q(eginning)j(of)d(ev)o(ery)g(T)1612 +1393 y(E)1638 1384 y(Xdra)o(w)f(dra)o(wing.)0 1472 y +Fq(\\fcir)14 b(f:)p Fo(lev)o(el)19 b Fq(r:)p Fo(radius)240 +1534 y Ft(Dra)o(w)h(a)g(\014lled)j(circle)g(with)e(cen)o(ter)g(at)f +(the)h(curren)o(t)g(p)q(osition.)38 b(The)21 b(radius)h(is)f(sp)q +(eci\014ed)i(b)o(y)240 1597 y Fo(radius)p Ft(.)28 b(The)18 +b(circle)i(is)e(pain)o(ted)h(with)f(the)g(gra)o(y)e(lev)o(el)j(sp)q +(eci\014ed)h(b)o(y)e Fo(lev)o(el)p Ft(.)29 b(A)18 b(gra)o(y)f(lev)o(el) +i(of)e(1)240 1659 y(corresp)q(onds)g(to)f(white,)h(with)g(decreasing)g +(v)m(alues)h(getting)e(dark)o(er.)23 b(The)17 b(lev)o(el)h(0)e(is)h +(full)h(blac)o(k.)240 1721 y(This)k(command)f(do)q(es)h(not)f(dra)o(w)f +(a)i(line)h(along)e(the)g(circumference.)40 b(The)22 +b(dra)o(wing)f(size)h(is)240 1783 y(increased)16 b(if)g(necessary)f(to) +g(con)o(tain)g(the)h(circle.)0 1872 y Fq(\\fellip)e(f:)p +Fo(lev)o(el)k Fq(rx:)p Fo(x-radius)g Fq(ry:)p Fo(y-radius)240 +1934 y Ft(Dra)o(w)c(a)h(\014lled)i(ellipse)h(with)e(cen)o(ter)f(at)g +(the)g(curren)o(t)h(p)q(osition.)21 b(The)16 b(radius)g(in)g(the)f +Fo(x)k Ft(direction)240 1996 y(is)g(sp)q(eci\014ed)i(b)o(y)e +Fo(x-radius)p Ft(.)32 b(The)19 b(radius)g(in)h(the)f +Fo(y)k Ft(direction)d(is)f(sp)q(eci\014ed)i(b)o(y)e Fo(y-radius)p +Ft(.)32 b(The)240 2059 y(ellipse)16 b(is)e(pain)o(ted)h(with)f(the)g +(gra)o(y)e(lev)o(el)j(sp)q(eci\014ed)h(b)o(y)e Fo(lev)o(el)p +Ft(.)20 b(A)14 b(gra)o(y)f(lev)o(el)i(of)e(1)h(corresp)q(onds)g(to)240 +2121 y(white,)i(with)g(decreasing)h(v)m(alues)g(getting)e(dark)o(er.)21 +b(The)16 b(lev)o(el)h(0)f(is)g(full)h(blac)o(k.)22 b(This)16 +b(command)240 2183 y(do)q(es)h(not)f(dra)o(w)g(a)g(line)i(along)e(the)h +(b)q(oundary)g(of)f(the)g(ellipse.)26 b(The)17 b(dra)o(wing)f(size)i +(is)f(increased)240 2245 y(if)f(necessary)f(to)g(con)o(tain)g(the)g +(ellipse.)0 2334 y Fq(\\htext)f(\()p Fo(x)k(y)t Fq(\){)p +Fo(text)q Fq(})0 2396 y(\\htext)c({)p Fo(text)q Fq(})240 +2458 y Ft(The)19 b(\014rst)g(form)f(of)h(this)g(command)g(places)h(the) +f(T)1150 2468 y(E)1176 2458 y(X)g(text)f Fo(text)i Ft(horizon)o(tally)g +(with)f(the)g(text)240 2521 y(reference)12 b(p)q(oin)o(t)f(at)g(the)g +(co)q(ordinate)h Fq(\()p Fo(x)18 b(y)t Fq(\))p Ft(.)g(The)11 +b(new)h(curren)o(t)f(p)q(osition)h(is)g Fq(\()p Fo(x)18 +b(y)t Fq(\))p Ft(.)g(The)11 b(second)240 2583 y(form)f(of)f(this)i +(command)f(places)i(the)e(T)903 2593 y(E)928 2583 y(X)h(text)f +Fo(text)g Ft(horizon)o(tally)i(with)e(the)h(text)e(reference)i(p)q(oin) +o(t)240 2645 y(at)k(the)g(curren)o(t)g(p)q(osition.)21 +b(The)15 b(text)g(reference)h(p)q(oin)o(t)g(is)f(set)g(with)h(the)f +Fq(\\textref)f Ft(command.)p eop +%%Page: 49 51 +49 50 bop 0 -83 a Ft(App)q(endix)17 b(D:)e(Alphab)q(etic)i(listing)g +(of)e(commands)1003 b(49)0 158 y Fq(\\ifill)14 b(f:)p +Fo(lev)o(el)240 221 y Ft(Close)j(the)g(curren)o(t)g(path)f(and)h(pain)o +(t)g(the)g(in)o(terior)g(of)g(the)g(region)g(with)g(gra)o(y)f(lev)o(el) +i Fo(lev)o(el)p Ft(.)26 b(The)240 283 y(line)18 b(around)d(the)h(path)g +(is)h(not)e(dra)o(wn.)22 b(Gra)o(y)15 b(lev)o(els)i(are)e(real)i(v)m +(alues)g(from)e(0)h(\(blac)o(k\))f(through)240 345 y(in)o(termediate)h +(v)m(alues)g(\(gra)o(ys\))e(to)g(1)h(\(white\).)0 454 +y Fq(\\larc)f(r:)p Fo(radius)k Fq(sd:)p Fo(start-angle)f +Fq(ed:)p Fo(end-angle)240 516 y Ft(Dra)o(w)9 b(a)h(coun)o(terclo)q(c)o +(kwise)h(arc.)18 b(The)11 b(cen)o(ter)f(of)g(the)g(arc)g(is)h(at)e(the) +i(curren)o(t)f(p)q(osition.)19 b(The)10 b(radius)240 +578 y(is)j(sp)q(eci\014ed)i(b)o(y)e Fo(radius)p Ft(.)19 +b(The)13 b(start)f(and)h(end)g(angles)h(\(in)f(degrees\))f(are)h(sp)q +(eci\014ed)i(b)o(y)d Fo(start-angle)240 640 y Ft(and)j +Fo(end-angle)p Ft(.)22 b(This)15 b(command)g(do)q(es)h(not)f(a\013ect)f +(the)i(limits)g(\(size\))g(of)e(the)i(dra)o(wing.)0 749 +y Fq(\\lcir)e(r:)p Fo(radius)240 811 y Ft(Dra)o(w)j(a)h(circle)j(with)d +(cen)o(ter)h(at)f(the)h(curren)o(t)f(p)q(osition.)31 +b(The)19 b(radius)g(is)g(sp)q(eci\014ed)h(b)o(y)f Fo(radius)p +Ft(.)240 873 y(This)d(command)g(dra)o(ws)f(a)g(line)j(along)e(the)f +(circumference)j(of)d(the)h(circle.)23 b(The)16 b(dra)o(wing)g(size)g +(is)240 936 y(increased)g(if)g(necessary)f(to)g(con)o(tain)g(the)h +(circle.)0 1044 y Fq(\\lellip)e(rx:)p Fo(x-radius)k Fq(ry:)p +Fo(y-radius)240 1106 y Ft(Dra)o(w)i(an)g(ellipse)j(with)e(cen)o(ter)g +(at)f(the)h(curren)o(t)g(p)q(osition.)37 b(The)21 b(radius)g(in)h(the)f +Fo(x)j Ft(direction)240 1169 y(is)19 b(sp)q(eci\014ed)i(b)o(y)e +Fo(x-radius)p Ft(.)32 b(The)19 b(radius)g(in)h(the)f +Fo(y)k Ft(direction)d(is)f(sp)q(eci\014ed)i(b)o(y)e Fo(y-radius)p +Ft(.)32 b(The)240 1231 y(dra)o(wing)15 b(size)h(is)g(increased)g(if)g +(necessary)f(to)g(con)o(tain)g(the)h(ellipse.)0 1339 +y Fq(\\lfill)e(f:)p Fo(lev)o(el)240 1402 y Ft(Close)i(the)f(curren)o(t) +h(path,)f(dra)o(w)g(the)g(line)j(around)d(the)h(path)f(using)h(the)g +(curren)o(t)f(grey)h(lev)o(el)h(for)240 1464 y(lines)f(and)e(pain)o(t)h +(the)f(in)o(terior)h(of)e(the)i(region)f(with)h(sp)q(eci\014ed)h(gra)o +(y)d(lev)o(el)j Fo(lev)o(el)p Ft(.)21 b(Gra)o(y)13 b(lev)o(els)i(are) +240 1526 y(real)h(v)m(alues)g(from)e(0)h(\(blac)o(k\))g(through)g(in)o +(termediate)h(v)m(alues)g(\(gra)o(ys\))e(to)g(1)h(\(white\).)0 +1635 y Fq(\\linewd)f Fo(width)240 1697 y Ft(Set)19 b(the)g(line)h +(width)g(to)e Fo(width)h Ft(units.)31 b(Initially)22 +b Fo(width)d Ft(is)g(0.01)f(inc)o(hes)i(\(corresp)q(onding)f(to)f(3)240 +1759 y(pixels)f(at)d(300)h(pixels)h(to)f(the)g(inc)o(h\).)0 +1868 y Fq(\\lpatt)f(\()p Fo(pattern)p Fq(\))240 1930 +y Ft(Set)21 b(lines)h(to)e(ha)o(v)o(e)h(the)f(pattern)h +Fq(\()p Fo(pattern)p Fq(\))p Ft(.)36 b(A)20 b(pattern)h(is)g(a)f +(sequence)i(of)f(on/o\013)e(lengths)240 1992 y(separated)e(b)o(y)g +(blanks)g(and)h(enclosed)g(in)g(paren)o(theses.)25 b(The)17 +b(lengths)h(alternately)g(sp)q(ecify)g(the)240 2055 y(length)g(of)f(a)h +(dash)f(and)h(the)g(length)g(of)f(a)g(gap)h(b)q(et)o(w)o(een)f(dashes.) +28 b(Eac)o(h)17 b(length)h(is)g(in)o(terpreted)240 2117 +y(using)c(the)g(curren)o(t)f(scaling)i(and)e(dra)o(wing)h(units.)20 +b(The)13 b(pattern)g(is)h(used)g(cyclically)l(.)23 b(The)13 +b(empt)o(y)240 2179 y(pattern)k(signi\014es)i(a)e(solid)i(line.)28 +b(The)18 b(initial)i(line)f(pattern)e(is)h(a)f(solid)i(line,)g(corresp) +q(onding)g(to)240 2241 y(the)c(empt)o(y)g(pattern)g Fq(\\lpatt)f(\(\))p +Ft(.)0 2350 y Fq(\\lvec)g(\()p Fo(x)19 b(y)t Fq(\))240 +2412 y Ft(Dra)o(w)c(a)h(line)i(from)d(the)h(curren)o(t)g(p)q(osition)h +(to)f(co)q(ordinate)h Fq(\()p Fo(x)h(y)t Fq(\))p Ft(.)k(The)16 +b(new)h(curren)o(t)f(p)q(osition)240 2474 y(is)g Fq(\()p +Fo(x)i(y)t Fq(\))p Ft(.)0 2583 y Fq(\\move)c(\()p Fo(x)19 +b(y)t Fq(\))240 2645 y Ft(Mo)o(v)o(e)14 b(to)h(co)q(ordinate)g +Fq(\()p Fo(x)k(y)t Fq(\))p Ft(.)g(The)d(new)f(curren)o(t)g(p)q(osition) +h(is)g Fq(\()p Fo(x)i(y)t Fq(\))p Ft(.)p eop +%%Page: 50 52 +50 51 bop 0 -83 a Ft(50)1722 b(T)1793 -73 y(E)1819 -83 +y(Xdra)o(w)0 158 y Fq(\\ravec)14 b(\()p Fo(dx)19 b(dy)t +Fq(\))240 221 y Ft(Dra)o(w)c(a)h(line)i(with)f(an)f(arro)o(whead)f +(from)h(the)g(curren)o(t)h(p)q(osition,)g Fo(dx)j Ft(units)d(in)g(the)f +Fo(x)k Ft(direction)240 283 y(and)e Fo(y)j Ft(units)d(in)g(the)f +Fo(y)k Ft(direction.)28 b(The)18 b(\014nal)g(p)q(osition)g(b)q(ecomes)g +(the)g(new)f(curren)o(t)g(p)q(osition.)240 345 y(The)e(arro)o(whead)g +(is)g(aligned)i(with)e(the)h(line,)g(with)g(the)f(tip)h(at)e(the)i(new) +f(curren)o(t)g(p)q(osition.)0 454 y Fq(\\relsegscale)f +Fo(v)m(alue)240 516 y Ft(Adjust)i(the)g(segmen)o(t)f(scale)h(factor)f +(b)o(y)h(m)o(ultiplying)i(b)o(y)e Fo(v)m(alue)p Ft(.)22 +b(This)17 b(has)e(the)h(e\013ect)g(of)f(m)o(ulti-)240 +578 y(plying)i(the)e(curren)o(t)g(o)o(v)o(erall)g(scale)h(factor)e(b)o +(y)h(the)h(same)e(factor.)19 b(The)d(o)o(v)o(erall)f(scaling)h(factor)e +(is)240 640 y(the)h(pro)q(duct)h(of)f(the)g(unit)h(scale)g(factor)e +(and)h(the)h(segmen)o(t)e(scale)i(factor.)0 749 y Fq(\\relunitscale)d +Fo(v)m(alue)240 811 y Ft(Adjust)h(the)g(unit)g(scale)h(factor)e(b)o(y)g +(m)o(ultiplying)j(b)o(y)e Fo(v)m(alue)p Ft(.)21 b(This)14 +b(has)g(the)g(e\013ect)f(of)h(m)o(ultiplying)240 873 +y(the)h(o)o(v)o(erall)g(scale)g(factor)f(b)o(y)h(the)g(same)f(factor.) +19 b(The)c(o)o(v)o(erall)g(scaling)h(factor)e(is)h(the)g(pro)q(duct)g +(of)240 936 y(the)g(unit)h(scale)g(factor)e(and)i(the)f(segmen)o(t)g +(scale)h(factor.)0 1044 y Fq(\\rlvec)e(\()p Fo(dx)19 +b(dy)t Fq(\))240 1106 y Ft(Dra)o(w)14 b(a)h(line)i(from)e(the)g(curren) +o(t)h(p)q(osition,)g Fo(dx)j Ft(units)d(in)g(the)f Fo(x)k +Ft(direction)d(and)g Fo(dy)k Ft(units)c(in)g(the)240 +1169 y Fo(y)j Ft(direction.)i(The)16 b(\014nal)g(p)q(osition)g(b)q +(ecomes)g(the)f(new)g(curren)o(t)h(p)q(osition.)0 1277 +y Fq(\\rmove)e(\()p Fo(dx)19 b(dy)t Fq(\))240 1339 y +Ft(Mo)o(v)o(e)h(from)g(the)g(curren)o(t)h(p)q(osition,)i +Fo(dx)h Ft(units)d(in)g(the)g Fo(x)j Ft(direction)e(and)f +Fo(dy)j Ft(units)e(in)f(the)g Fo(y)240 1402 y Ft(direction.)g(The)16 +b(\014nal)g(p)q(osition)g(b)q(ecomes)g(the)f(new)g(curren)o(t)g(p)q +(osition.)0 1510 y Fq(\\rtext)f(td:)p Fo(angle)k Fq(\(x)d(y\){)p +Fo(text)q Fq(})0 1572 y(\\rtext)f(td:)p Fo(angle)k Fq({)p +Fo(text)q Fq(})240 1635 y Ft(The)i(\014rst)f(form)f(of)h(this)h +(command)f(places)h(the)g(T)1153 1645 y(E)1178 1635 y(X)g(text)f +Fo(text)g Ft(at)g(an)g(angle)h(with)g(the)f(text)240 +1697 y(reference)j(p)q(oin)o(t)g(at)f(the)g(co)q(ordinate)h +Fq(\()p Fo(x)c(y)t Fq(\))p Ft(.)38 b(The)22 b(new)g(curren)o(t)f(p)q +(osition)h(is)g Fq(\()p Fo(x)d(y)t Fq(\))p Ft(.)38 b(The)240 +1759 y(second)23 b(form)e(of)h(this)h(command)f(places)i(the)e(T)1129 +1769 y(E)1155 1759 y(X)g(text)g Fo(text)h Ft(at)e(an)i(angle)f(with)h +(the)f(text)240 1822 y(reference)f(p)q(oin)o(t)g(at)f(the)h(curren)o(t) +f(p)q(osition.)37 b(In)21 b(b)q(oth)f(cases,)i(the)e(T)1491 +1831 y(E)1517 1822 y(X)g(text)g(is)h(placed)h(in)f(a)240 +1884 y(b)q(o)o(x)15 b(and)g(the)g(b)q(o)o(x)f(is)i(rotated)e(coun)o +(terclo)q(c)o(kwise)i(b)o(y)e Fo(angle)k Ft(degrees)d(ab)q(out)g(the)g +(text)f(reference)240 1946 y(p)q(oin)o(t.)20 b(The)c(text)e(reference)i +(p)q(oin)o(t)g(is)g(set)f(with)g(the)h Fq(\\textref)e +Ft(command.)0 2055 y Fq(\\savecurrpos)g(\(*)p Fo(p)o(x)k +Fq(*)p Fo(p)o(y)t Fq(\))240 2117 y Ft(Sa)o(v)o(e)d(the)g(curren)o(t)g +(p)q(osition)h(as)f(the)g(absolute)h(p)q(osition)g(referenced)g(b)o(y)g +Fq(\(*)p Fo(p)o(x)i Fq(*)p Fo(p)o(y)t Fq(\))p Ft(.)0 +2225 y Fq(\\savepos)c(\()p Fo(x)k(y)t Fq(\)\(*)p Fo(p)o(x)g +Fq(*)p Fo(p)o(y)t Fq(\))240 2288 y Ft(Sa)o(v)o(e)d(the)h(co)q(ordinate) +g(p)q(osition)h Fq(\()p Fo(x)h(y)t Fq(\))d Ft(as)g(the)h(absolute)g(p)q +(osition)h(referenced)f(b)o(y)g Fq(\(*)p Fo(p)o(x)i Fq(*)p +Fo(p)o(y)t Fq(\))p Ft(.)240 2350 y(The)f(co)q(ordinate)g +Fq(\()p Fo(x)h(y)t Fq(\))f Ft(is)g(in)o(terpreted)g(in)h(the)f(normal)f +(fashion)h(as)g(a)f(co)q(ordinate)h(relativ)o(e)h(to)240 +2412 y(the)d(curren)o(t)g(segmen)o(t,)g(using)h(the)f(curren)o(t)g +(scaling)h(factors)e(and)i(dra)o(wing)f(unit.)0 2521 +y Fq(\\setgray)f Fo(lev)o(el)240 2583 y Ft(Set)h(the)h(gra)o(y)e(lev)o +(el)j(of)e(lines.)22 b(Gra)o(y)14 b(lev)o(els)j(are)e(real)h(v)m(alues) +g(from)f(0)g(\(blac)o(k\))g(through)g(in)o(terme-)240 +2645 y(diate)h(v)m(alues)g(\(gra)o(y\))d(to)i(1)g(\(white\).)20 +b(The)15 b(initial)i(gra)o(y)e(lev)o(el)h(is)g(0)f(corresp)q(onding)h +(to)e(blac)o(k.)p eop +%%Page: 51 53 +51 52 bop 0 -83 a Ft(App)q(endix)17 b(D:)e(Alphab)q(etic)i(listing)g +(of)e(commands)1003 b(51)0 158 y Fq(\\setsegscale)14 +b Fo(scale)240 221 y Ft(Set)19 b(the)f(segmen)o(t)g(scale)h(factor.)29 +b(The)18 b(argumen)o(t)g Fo(scale)k Ft(is)d(a)f(real)h(n)o(um)o(b)q(er) +f(whic)o(h)i(is)f(used)g(to)240 283 y(scale)d(co)q(ordinate)g(v)m +(alues.)21 b(The)16 b(o)o(v)o(erall)f(scale)h(factor)f(is)g(the)h(pro)q +(duct)g(of)e(the)i(unit)g(scale)g(factor)240 345 y(and)f(the)h(segmen)o +(t)e(scale)i(factor.)0 432 y Fq(\\setunitscale)d Fo(scale)240 +495 y Ft(Set)f(the)h(unit)g(scaling)g(to)e Fo(scale)p +Ft(.)20 b(The)12 b(argumen)o(t)g Fo(scale)j Ft(is)e(a)f(real)h(n)o(um)o +(b)q(er)f(whic)o(h)h(is)g(used)g(to)e(scale)240 557 y(co)q(ordinate)j +(v)m(alues.)21 b(The)14 b(o)o(v)o(erall)g(scaling)h(factor)e(is)h(the)g +(pro)q(duct)g(of)g(the)g(unit)g(scale)h(factor)e(and)240 +619 y(the)i(segmen)o(t)g(scale)h(factor.)0 706 y Fq(\\texdrawbox)e({)h +(...)f(})240 769 y Ft(Create)21 b(a)f(T)461 778 y(E)487 +769 y(Xdra)o(w)g(b)q(o)o(x.)38 b(The)22 b(argumen)o(t)e(con)o(tains)h +(T)1280 778 y(E)1306 769 y(Xdra)o(w)f(commands.)38 b(This)22 +b(macro)240 831 y(returns)16 b(a)g(T)462 841 y(E)487 +831 y(X)g(b)q(o)o(x)h(with)f(heigh)o(t)h(equal)f(to)g(the)g(heigh)o(t)h +(of)e(the)i(dra)o(wing)f(and)g(width)h(equal)g(to)240 +893 y(the)e(width)h(of)f(the)g(dra)o(wing.)20 b(The)15 +b(depth)h(of)f(the)g(b)q(o)o(x)g(is)h(zero.)0 980 y Fq(\\textref)e(h:)p +Fo(h-ref)24 b Fq(v:)p Fo(v-ref)240 1043 y Ft(Set)17 b(the)h(text)e +(reference)i(p)q(oin)o(t)g(for)f(subsequen)o(t)h(text)e(commands.)26 +b(The)18 b(horizon)o(tal)f(reference)240 1105 y(p)q(oin)o(t)f +Fo(h-ref)25 b Ft(is)16 b(one)f(of)h Fq(L)p Ft(,)f Fq(C)g +Ft(or)g Fq(R)g Ft(\(left,)h(cen)o(ter)f(or)g(righ)o(t\).)21 +b(The)16 b(v)o(ertical)g(reference)g(p)q(oin)o(t)g Fo(v-ref)240 +1167 y Ft(is)k(one)f(of)g Fq(T)p Ft(,)h Fq(C)f Ft(or)f +Fq(B)h Ft(\(top,)h(cen)o(ter)f(or)f(b)q(ottom\).)31 b(F)l(or)19 +b(rotated)f(text,)h(the)h(reference)g(p)q(oin)o(t)f(is)240 +1229 y(determined)f(b)q(efore)f(rotation.)24 b(The)17 +b(initial)i(text)d(reference)i(p)q(oin)o(t)f(corresp)q(onds)g(to)f +Fq(\\textref)240 1292 y(h:L)f(v:B)p Ft(.)0 1379 y Fq(\\vtext)f(\(x)h +(y\){)p Fo(text)q Fq(})0 1441 y(\\vtext)f({)p Fo(text)q +Fq(})240 1503 y Ft(The)23 b(\014rst)f(form)g(of)h(this)g(command)f +(places)i(the)f(T)1180 1513 y(E)1205 1503 y(X)g(text)f +Fo(text)i Ft(v)o(ertically)g(with)f(the)f(text)240 1566 +y(reference)g(p)q(oin)o(t)g(at)f(the)g(co)q(ordinate)h +Fq(\()p Fo(x)c(y)t Fq(\))p Ft(.)38 b(The)22 b(new)g(curren)o(t)f(p)q +(osition)h(is)g Fq(\()p Fo(x)d(y)t Fq(\))p Ft(.)38 b(The)240 +1628 y(second)13 b(form)e(of)g(this)i(command)f(places)h(the)f(T)1057 +1638 y(E)1082 1628 y(X)g(text)g Fo(text)g Ft(v)o(ertically)h(with)g +(the)f(text)f(reference)240 1690 y(p)q(oin)o(t)17 b(at)f(the)h(curren)o +(t)f(p)q(osition.)26 b(In)17 b(b)q(oth)g(cases,)f(the)h(T)1252 +1700 y(E)1278 1690 y(X)f(text)h(is)g(placed)h(in)f(a)f(b)q(o)o(x)h(and) +g(the)240 1752 y(b)q(o)o(x)d(is)g(rotated)f(coun)o(terclo)q(c)o(kwise)j +(b)o(y)d(90)h(degrees)g(ab)q(out)g(the)g(text)g(reference)g(p)q(oin)o +(t.)20 b(The)14 b(text)240 1815 y(reference)i(p)q(oin)o(t)g(is)f(set)g +(with)h(the)f Fq(\\textref)f Ft(command.)p eop +%%Page: 52 54 +52 53 bop 0 -83 a Ft(52)1722 b(T)1793 -73 y(E)1819 -83 +y(Xdra)o(w)p eop +%%Page: 53 55 +53 54 bop 0 -83 a Ft(Command)15 b(Index)1575 b(53)0 158 +y Fp(Command)16 b(Index)0 399 y Ff(\\)0 466 y Fe(\\arc)t +Fd(.)5 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)17 +b Fc(13)0 524 y Fe(\\arrowhead)o(si)o(ze)6 b Fd(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)22 b +Fc(9)0 582 y Fe(\\arrowhead)o(ty)o(pe)6 b Fd(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)22 b Fc(9)0 +640 y Fe(\\avec)t Fd(.)t(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 +b Fc(8)0 698 y Fe(\\begin{tex)o(dr)o(aw})8 b Fd(.)s(.)e(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)21 b Fc(5)0 +756 y Fe(\\bsegment)6 b Fd(.)s(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)19 b +Fc(17)0 814 y Fe(\\btexdraw)7 b Fd(.)s(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 +b Fc(5)0 872 y Fe(\\centertex)o(dr)o(aw)6 b Fd(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)22 b +Fc(5)0 930 y Fe(\\clvec)8 b Fd(.)e(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)23 +b Fc(14)0 989 y Fe(\\cossin)9 b Fd(.)s(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)22 +b Fc(35)0 1047 y Fe(\\currentpo)o(s)t Fd(.)s(.)6 b(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 +b Fc(35)0 1105 y Fe(\\drawbb)9 b Fd(.)s(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)22 +b Fc(21)0 1163 y Fe(\\drawdim)9 b Fd(.)s(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)21 +b Fc(7)0 1221 y Fe(\\end{texdr)o(aw)o(})8 b Fd(.)e(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24 +b Fc(5)0 1279 y Fe(\\esegment)6 b Fd(.)s(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)19 +b Fc(17)0 1337 y Fe(\\etexdraw)7 b Fd(.)s(.)f(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 +b Fc(5)0 1395 y Fe(\\everytexd)o(ra)o(w)8 b Fd(.)e(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24 +b Fc(5)0 1453 y Fe(\\fcir)s Fd(.)t(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)16 b Fc(13)0 1512 y Fe(\\fellip)9 b Fd(.)s(.)e(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)22 b Fc(13)0 1570 y Fe(\\getpos)9 b Fd(.)s(.)e(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)22 b Fc(35)0 1628 y Fe(\\htext)8 b Fd(.)e(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)23 b Fc(10)0 1686 y Fe(\\ifill)8 b Fd(.)e(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)23 b Fc(15)0 1744 y Fe(\\lcir)s Fd(.)t(.)6 b(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)16 b Fc(12)0 1802 y Fe(\\lellip)9 b Fd(.)s(.)e(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)22 b Fc(13)0 1860 y Fe(\\lfill)8 b Fd(.)e(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)23 b Fc(15)0 1918 y Fe(\\linewd)7 b Fd(.)g(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)23 b Fc(8)0 1977 y Fe(\\lvec)t Fd(.)t(.)6 +b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Fc(8)0 2035 +y Fe(\\move)t Fd(.)t(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 +b Fc(8)0 2093 y Fe(\\PSarc)8 b Fd(.)e(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)23 +b Fc(32)0 2151 y Fe(\\PSarcn)9 b Fd(.)s(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)22 +b Fc(32)0 2209 y Fe(\\PSclosepa)o(th)8 b Fd(.)e(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)24 b +Fc(31)0 2267 y Fe(\\PSfill)9 b Fd(.)s(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)22 +b Fc(31)0 2325 y Fe(\\PSlineto)6 b Fd(.)s(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)19 +b Fc(32)0 2383 y Fe(\\PSmoveto)6 b Fd(.)s(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)19 +b Fc(32)0 2441 y Fe(\\PSnewpath)t Fd(.)s(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)18 +b Fc(31)0 2500 y Fe(\\PSsetline)o(ca)o(p)7 b Fd(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23 b +Fc(31)0 2558 y Fe(\\PSsetline)o(jo)o(in)8 b Fd(.)s(.)e(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)21 b Fc(31)0 +2616 y Fe(\\PSstroke)6 b Fd(.)s(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)19 b +Fc(31)1015 399 y Fe(\\ravec)10 b Fd(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)25 b Fc(8)1015 457 y Fe(\\realadd)8 b Fd(.)s(.)e(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)21 +b Fc(36)1015 515 y Fe(\\realdiv)8 b Fd(.)s(.)e(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)21 +b Fc(36)1015 573 y Fe(\\realmult)7 b Fd(.)s(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 +b Fc(36)1015 632 y Fe(\\relsegscal)o(e)8 b Fd(.)e(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)25 +b Fc(20)1015 690 y Fe(\\relunitsca)o(le)6 b Fd(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 b +Fc(20)1015 748 y Fe(\\rlvec)10 b Fd(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)25 b Fc(8)1015 806 y Fe(\\rmove)10 b Fd(.)c(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)25 b Fc(8)1015 864 y Fe(\\rtext)9 b Fd(.)d(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)24 b Fc(10)1015 922 y Fe(\\savecurrpo)o(s)8 +b Fd(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)25 b Fc(18)1015 980 y Fe(\\savepos)8 b Fd(.)s(.)e(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)21 b Fc(18)1015 1038 y Fe(\\setgray)9 b Fd(.)s(.)d(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)22 b Fc(8)1015 1096 y Fe(\\setsegscal)o(e)8 +b Fd(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)25 b Fc(20)1015 1155 y Fe(\\setunitsca)o(le)6 +b Fd(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)23 b Fc(19)1015 1213 y Fe(\\textref)8 b Fd(.)s(.)e(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)21 b Fc(11)1015 1271 y Fe(\\vectlen)8 b Fd(.)s(.)e(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)21 b Fc(35)1015 1329 y Fe(\\vtext)9 b Fd(.)d(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)24 b Fc(10)1015 1387 y Fe(\\writeps)8 b Fd(.)s(.)e(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)21 b Fc(32)1015 1522 y Fs(A)1015 1588 y Fe(arc)6 +b Fd(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19 +b Fc(32)1015 1647 y Fe(arcn)t Fd(.)5 b(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)18 b Fc(32)1015 1781 y Fs(C)1015 1848 y Fe(closepath)7 +b Fd(.)s(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Fc(31)1015 1983 y Fs(F)1015 +2049 y Fe(fill)t Fd(.)5 b(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 +b Fc(31)1015 2184 y Fs(L)1015 2251 y Fe(lineto)9 b Fd(.)d(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)24 b Fc(32)1015 2386 y Fs(M)1015 2452 +y Fe(moveto)9 b Fd(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24 +b Fc(32)1015 2587 y Fs(N)1015 2653 y Fe(newpath)9 b Fd(.)t(.)d(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)22 b Fc(31)p eop +%%Page: 54 56 +54 55 bop 0 -83 a Ft(54)1722 b(T)1793 -73 y(E)1819 -83 +y(Xdra)o(w)0 158 y Fs(S)0 225 y Fe(setlinecap)t Fd(.)s(.)7 +b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)g(.)18 b Fc(31)1015 158 y Fe(setlinejoin)s Fd(.)s(.)6 +b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)17 b Fc(31)1015 216 y Fe(stroke)9 b Fd(.)d(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)24 b Fc(31)p eop +%%Page: 55 57 +55 56 bop 0 -83 a Ft(Concept)15 b(Index)1616 b(55)0 158 +y Fp(Concept)16 b(Index)0 414 y Fs(A)0 481 y Fc(accessing)f(T)187 +489 y(E)207 481 y(Xdra)o(w)8 b Fd(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)21 b Fc(3,)13 b(23)0 539 y(angle)h(of)f(a)g(v)o(ector)7 +b Fd(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)20 b Fc(35)0 597 y(arcs)5 b Fd(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 +b Fc(12,)13 b(32)0 655 y(arro)o(whead)h(parameters)s +Fd(.)7 b(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)16 +b Fc(8)0 713 y(arro)o(ws)7 b Fd(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)19 b Fc(7)0 827 y Fs(B)0 893 y Fc(Bezier)14 b(curv)o(es)c +Fd(.)c(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)22 b Fc(14)0 1007 y Fs(C)0 1073 y Fc(circles)11 +b Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)22 b Fc(12)0 +1132 y(command)14 b(syn)o(tax)5 b Fd(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)17 b Fc(5)0 1190 +y(co)q(ordinate)e(parsing)8 b Fd(.)g(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)20 b Fc(35)0 1248 y(co)q(ordinate)15 +b(sp)q(eci\014cation)d Fd(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +22 b Fc(6)0 1306 y(co)q(ordinate,)15 b(sym)o(b)q(olic)7 +b Fd(.)h(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 +b Fc(18)0 1364 y(co)q(ordinates)9 b Fd(.)f(.)e(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)21 +b Fc(6)0 1422 y(cosine)14 b(of)f(a)g(v)o(ector)g(direction)6 +b Fd(.)i(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)18 b Fc(35)0 1480 y(curren)o(t)c(p)q +(osition)f Fd(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)25 +b Fc(7,)12 b(21,)h(35)0 1538 y(curren)o(t)h(p)q(osition)h(in)f(P)o +(ostScript)7 b Fd(.)h(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Fc(31)0 1597 +y(curv)o(es)8 b Fd(.)f(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)21 +b Fc(14)0 1710 y Fs(D)0 1777 y Fc(dashed)14 b(lines)f +Fd(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)24 b Fc(8)0 1835 y(direction)15 +b(of)e(a)g(line)7 b Fd(.)g(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)20 b Fc(35)0 1893 y(distribution)7 b +Fd(.)i(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)19 b Fc(1)0 1951 y(dotted)14 +b(lines)6 b Fd(.)i(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19 b Fc(8)0 2009 +y(dra)o(wing)14 b(segmen)o(ts)6 b Fd(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19 b Fc(17)0 2067 y Fe(dvi2ps)10 +b Fc(prin)o(ter)15 b(driv)o(er)d Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)h(.)23 b Fc(23)0 2125 y Fe(dvialw)10 b Fc(prin)o(ter)15 +b(driv)o(er)d Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)23 +b Fc(23)0 2184 y Fe(dvilaser)10 b Fc(prin)o(ter)k(driv)o(er)8 +b Fd(.)f(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21 b Fc(23)0 +2242 y Fe(dvips)11 b Fc(prin)o(ter)j(driv)o(er)e Fd(.)6 +b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)24 b Fc(1,)12 b(23,)h(28)0 +2300 y Fe(dvipsone)d Fc(prin)o(ter)k(driv)o(er)8 b Fd(.)f(.)f(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)21 b Fc(23)0 2358 y Fe(dvitops)10 +b Fc(prin)o(ter)k(driv)o(er)d Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)22 b Fc(23)0 2416 y Fe(dviwindo)10 b Fc(prin)o(ter)k(driv)o(er) +8 b Fd(.)f(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21 b Fc(23)0 +2530 y Fs(E)0 2596 y Fc(ellipses)13 b Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)23 b Fc(12)0 2654 y(Encapsulated)16 b(P)o(ostScript)e(File)t +Fd(.)8 b(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)17 b Fc(28)1015 414 y(errors)d(while)g(using)h +(T)1348 422 y(E)1368 414 y(Xdra)o(w)8 b Fd(.)e(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)21 +b Fc(25)1015 472 y(example,)15 b(arro)o(w)d(curv)o(e)f +Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23 +b Fc(36)1015 530 y(example,)15 b(blo)q(c)o(k)f(diagram)6 +b Fd(.)i(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)19 b Fc(39)1015 +588 y(example,)c(circle)f(and)g(ellipse)s Fd(.)9 b(.)d(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)17 b Fc(44)1015 647 y(example,)e(graph)9 b Fd(.)e(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)22 +b Fc(42)1015 759 y Fs(F)1015 825 y Fc(\014ll)15 b(op)q(erations,)g(in)o +(teraction)g(with)e(dra)o(wing)h(segmen)o(ts)t Fd(.)7 +b(.)f(.)17 b Fc(17)1015 884 y(\014lled)e(circles)5 b +Fd(.)j(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)18 b Fc(12)1015 942 y(\014lling)e(regions)d +Fd(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)25 +b Fc(15,)13 b(31)1015 1054 y Fs(G)1015 1121 y Fe(graphics)d +Fc(pac)o(k)n(age)e Fd(.)f(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)20 +b Fc(1,)13 b(3,)g(23,)g(28)1015 1179 y(graphics)i(placemen)o(t)e +Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)24 +b Fc(28)1015 1237 y(gra)o(y)14 b(lev)o(els)h(for)d(lines)s +Fd(.)d(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)16 +b Fc(8)1015 1349 y Fs(I)1015 1416 y Fc(implemen)o(tatio)q(n)7 +b Fd(.)i(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)20 b Fc(26)1015 1474 y(initial)c(curren)o(t)e(p)q(osition)8 +b Fd(.)h(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)21 b +Fc(21)1015 1532 y(in)o(v)o(oking)16 b(T)1191 1540 y(E)1212 +1532 y(Xdra)o(w)5 b Fd(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)18 b Fc(3,)13 b(23)1015 1644 y Fs(L)1015 1711 y Fc(LaT)1080 +1719 y(E)1101 1711 y(X)s Fd(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)16 b +Fc(1,)d(3,)g(23)1015 1769 y(length)i(of)e(a)g(v)o(ector)7 +b Fd(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)20 +b Fc(35)1015 1827 y(line)15 b(cap)t Fd(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)17 b Fc(31)1015 1885 y(line)e(join)c Fd(.)6 b(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)23 b Fc(31)1015 1943 y(line)15 b(width)s Fd(.)7 +b(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)h(.)f(.)g(.)g(.)g(.)g(.)16 b Fc(8)1015 2001 y(lines)d +Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)23 b Fc(7,)13 +b(32)1015 2060 y(listing)j(of)d(commands)s Fd(.)7 b(.)f(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Fc(47)1015 2172 +y Fs(M)1015 2238 y Fc(mo)o(v)o(es)6 b Fd(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +19 b Fc(7,)13 b(32)1015 2351 y Fs(O)1015 2417 y Fe(oztex)e +Fc(prin)o(ter)j(driv)o(er)s Fd(.)8 b(.)e(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)17 b Fc(23)1015 2530 y Fs(P)1015 2596 +y Fc(pain)o(ting)f(regions)s Fd(.)8 b(.)e(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Fc(15)1015 2654 +y(paths)t Fd(.)8 b(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Fc(15,)c(17,)g(31)p +eop +%%Page: 56 58 +56 57 bop 0 -83 a Ft(56)1722 b(T)1793 -73 y(E)1819 -83 +y(Xdra)o(w)0 158 y Fe(pctexps)10 b Fc(prin)o(ter)k(driv)o(er)d +Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)22 b +Fc(23)0 216 y Fe(pctexwin)10 b Fc(prin)o(ter)k(driv)o(er)8 +b Fd(.)f(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21 b Fc(23)0 +275 y(placemen)o(t)14 b(of)f(graphics)i(and)f(text)6 +b Fd(.)f(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)h(.)f(.)g(.)18 b Fc(28)0 333 y(plain)d(T)118 341 +y(E)139 333 y(X)t Fd(.)5 b(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)16 +b Fc(3)0 391 y(p)q(osition)f(sp)q(eci\014cation)6 b Fd(.)i(.)f(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b Fc(6)0 449 +y(p)q(ositions,)d(sa)o(ving)8 b Fd(.)g(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)20 b Fc(18)0 507 y(P)o(ostScript)14 +b(commands)6 b Fd(.)i(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 +b Fc(31)0 565 y(P)o(ostScript)14 b(prin)o(ter)h(driv)o(ers)s +Fd(.)8 b(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)g(.)16 b Fc(23,)d(28)0 623 y(prin)o(ter)h(driv)o +(ers)s Fd(.)8 b(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)16 b Fc(23,)d(28)0 681 y(problems)i(while)f(using)g(T)387 +689 y(E)408 681 y(Xdra)o(w)6 b Fd(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19 b Fc(25)0 +739 y Fe(psprint)10 b Fc(driv)o(er)5 b Fd(.)i(.)f(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)17 b +Fc(23)0 847 y Fs(R)0 914 y Fc(relativ)o(e)e(p)q(ositioning)t +Fd(.)9 b(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)16 +b Fc(8)0 972 y(relativ)o(e)f(scaling)t Fd(.)8 b(.)e(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b +Fc(19)0 1030 y(resolution)t Fd(.)9 b(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 +b Fc(27)0 1088 y(rotated)c(text)t Fd(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)17 b Fc(10,)12 b(23,)h(27,)g(28)0 1196 y +Fs(S)0 1263 y Fc(sa)o(ving)i(p)q(ositions)t Fd(.)9 b(.)d(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)17 +b Fc(18)0 1321 y(scaling)t Fd(.)8 b(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 +b Fc(26)0 1379 y(scaling)e(co)q(ordinates)t Fd(.)9 b(.)d(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)17 b Fc(19)0 1437 +y(segmen)o(t)c(scale)7 b Fd(.)g(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)19 b Fc(19)0 1495 +y(segmen)o(ts)12 b Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24 b +Fc(17)0 1553 y(sine)14 b(of)f(a)g(v)o(ector)g(direction)7 +b Fd(.)h(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)19 b Fc(35)1015 +158 y(size)14 b(of)f(the)g(dra)o(wing)5 b Fd(.)j(.)e(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)18 b Fc(21)1015 216 +y(stroking)d(lines)s Fd(.)8 b(.)e(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)h(.)16 b Fc(17,)d(31)1015 275 y(sym)o(b)q(olic)j +(co)q(ordinate)t Fd(.)8 b(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)17 b Fc(18)1015 333 y(syn)o(tax)d(of)f(commands)e +Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)22 +b Fc(5)1015 452 y Fs(T)1015 519 y Fe(texdraw)11 b Fc(pac)o(k)n(age)5 +b Fd(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b +Fc(3,)13 b(23,)g(28)1015 577 y(text)h(commands)9 b Fd(.)e(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)22 +b Fc(10)1015 635 y(text)14 b(placemen)o(t)t Fd(.)7 b(.)f(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 +b Fc(28)1015 693 y(text)d(rotation)6 b Fd(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)19 b Fc(10,)13 b(23,)g(27,)g(28)1015 751 +y Fe(textures)d Fc(prin)o(ter)k(driv)o(er)8 b Fd(.)g(.)e(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)h(.)f(.)21 b Fc(23)1015 871 y Fs(U)1015 937 +y Fc(unit)15 b(scale)6 b Fd(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)19 +b Fc(19)1015 1057 y Fs(V)1015 1123 y Fc(v)o(ectors)13 +b Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)25 b Fc(7)1015 +1181 y(v)o(ertical)15 b(text)10 b Fd(.)c(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)23 +b Fc(10)1015 1301 y Fs(W)1015 1367 y Fc(width)14 b(of)f(lines)8 +b Fd(.)g(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)21 b Fc(8)1015 1487 y Fs(X)1015 1553 +y Fe(xdvi)12 b Fc(driv)o(er)d Fd(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)22 +b Fc(23)p eop +%%Page: -1 59 +-1 58 bop 1937 -83 a Ft(i)0 158 y Fp(T)-7 b(able)15 b(of)g(Con)n(ten)n +(ts)0 333 y Fs(1)67 b(In)n(tro)r(duction)9 b Fb(.)i(.)f(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)31 +b Fs(1)149 411 y Ft(1.1)45 b(Distribution)16 b(information)9 +b Fa(.)f(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) +f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h +(.)g(.)f(.)h(.)f(.)h(.)23 b Ft(1)0 535 y Fs(2)67 b(Using)22 +b(the)h(T)444 548 y(E)479 535 y(Xdra)n(w)f(Commands)11 +b Fb(.)e(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)f(.)h(.)33 b Fs(3)149 613 y Ft(2.1)45 b(Accessing)16 +b(T)484 623 y(E)510 613 y(Xdra)o(w)5 b Fa(.)i(.)h(.)f(.)h(.)f(.)h(.)f +(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) +f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f +(.)h(.)f(.)20 b Ft(3)149 675 y(2.2)45 b(Command)15 b(syn)o(tax)e +Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) +f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f +(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)28 b Ft(5)149 +737 y(2.3)45 b(T)278 747 y(E)303 737 y(Xdra)o(w)15 b(co)q(ordinates)9 +b Fa(.)f(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) +f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f +(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)24 b Ft(6)149 800 +y(2.4)45 b(Co)q(ordinate)15 b(sp)q(eci\014cation)g Fa(.)8 +b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h +(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) +h(.)f(.)h(.)f(.)28 b Ft(6)149 862 y(2.5)45 b(Line)17 +b(v)o(ectors)c Fa(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f +(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) +f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f +(.)h(.)f(.)29 b Ft(7)149 924 y(2.6)45 b(T)278 934 y(E)303 +924 y(X)16 b(text)c Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) +h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h +(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) +h(.)f(.)h(.)f(.)h(.)f(.)28 b Ft(10)149 986 y(2.7)45 b(Circles,)16 +b(ellipses)i(and)d(arcs)c Fa(.)c(.)g(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.) +f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h +(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)26 b Ft(12)149 +1049 y(2.8)45 b(Bezier)16 b(curv)o(es)e Fa(.)8 b(.)f(.)h(.)f(.)h(.)f(.) +h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h +(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) +h(.)f(.)h(.)f(.)h(.)g(.)f(.)29 b Ft(14)149 1111 y(2.9)45 +b(Fill)17 b(commands)10 b Fa(.)d(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) +h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g +(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) +h(.)f(.)25 b Ft(15)0 1236 y Fs(3)67 b(Dra)n(wing)22 b(Segmen)n(ts)g +(and)h(Scaling)17 b Fb(.)10 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)39 b Fs(17)149 1313 y +Ft(3.1)45 b(Dra)o(wing)15 b(segmen)o(ts)8 b Fa(.)e(.)i(.)f(.)h(.)f(.)h +(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) +h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h +(.)f(.)h(.)f(.)23 b Ft(17)149 1376 y(3.2)45 b(Dra)o(wing)15 +b(paths)10 b Fa(.)d(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h +(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) +h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)25 +b Ft(17)149 1438 y(3.3)45 b(Sa)o(ving)15 b(p)q(ositions)5 +b Fa(.)k(.)f(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.) +h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f +(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)20 +b Ft(18)149 1500 y(3.4)45 b(Scaling)17 b(co)q(ordinates)7 +b Fa(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.) +f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h +(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)23 b Ft(19)149 +1562 y(3.5)45 b(Dra)o(wing)15 b(size)8 b Fa(.)g(.)f(.)h(.)f(.)h(.)f(.)h +(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) +h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h +(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)23 b Ft(21)149 1625 y(3.6)45 +b(Initial)17 b(curren)o(t)e(p)q(osition)6 b Fa(.)i(.)g(.)f(.)h(.)f(.)h +(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.) +f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)21 +b Ft(21)0 1749 y Fs(4)67 b(Using)22 b(T)327 1763 y(E)362 +1749 y(Xdra)n(w)h(with)g(LaT)842 1763 y(E)877 1749 y(X)14 +b Fb(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)f(.)h(.)g(.)37 b Fs(23)149 1827 y Ft(4.1)45 b(P)o(ostScript)15 +b(prin)o(ter)g(driv)o(ers)10 b Fa(.)e(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f +(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) +h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)25 b Ft(23)0 +1952 y Fs(5)67 b(More)22 b(Details)13 b Fb(.)d(.)g(.)g(.)g(.)g(.)f(.)h +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)36 +b Fs(25)149 2029 y Ft(5.1)45 b(Errors)14 b(while)j(using)f(T)656 +2039 y(E)681 2029 y(Xdra)o(w)5 b Fa(.)i(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f +(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) +h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)20 b Ft(25)149 2092 +y(5.2)45 b(Extending)16 b(T)497 2101 y(E)523 2092 y(Xdra)o(w)9 +b Fa(.)e(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) +h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h +(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)24 b Ft(26)299 2154 +y(5.2.1)44 b(Scaling)15 b Fa(.)8 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h +(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) +h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h +(.)29 b Ft(26)299 2216 y(5.2.2)44 b(Resolution)13 b Fa(.)8 +b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g +(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) +h(.)f(.)h(.)f(.)h(.)f(.)h(.)27 b Ft(27)299 2279 y(5.2.3)44 +b(T)l(ext)15 b(placemen)o(t)7 b Fa(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f +(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) +f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)22 b +Ft(27)299 2341 y(5.2.4)44 b(The)15 b(in)o(termediate)h(P)o(ostScript)f +(\014le)g Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f +(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)29 b Ft(28)149 2403 +y(5.3)45 b(Ho)o(w)15 b(T)382 2413 y(E)407 2403 y(Xdra)o(w)g(merges)f +(graphics)i(and)g(text)d Fa(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f +(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)29 +b Ft(28)0 2528 y Fs(App)r(endix)24 b(A)67 b(P)n(ostScript)24 +b(Commands)5 b Fb(.)10 b(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.) +h(.)g(.)g(.)g(.)28 b Fs(31)p eop +%%Page: -2 60 +-2 59 bop 0 -83 a Ft(ii)1744 b(T)1793 -73 y(E)1819 -83 +y(Xdra)o(w)0 17 y Fs(App)r(endix)24 b(B)67 b(T)460 30 +y(E)496 17 y(Xdra)n(w)22 b(T)-6 b(o)r(olb)r(o)n(x)19 +b Fb(.)9 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)f(.)41 b Fs(35)149 94 y Ft(B.1)k(Co)q(ordinate)16 +b(parsing)f Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) +h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h +(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)30 b Ft(35)149 +157 y(B.2)45 b(Real)17 b(arithmetic)7 b Fa(.)h(.)g(.)f(.)h(.)f(.)h(.)f +(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.) +h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f +(.)h(.)f(.)h(.)f(.)23 b Ft(36)149 219 y(B.3)45 b(Arro)o(w)15 +b(curv)o(e)7 b Fa(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f +(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) +h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f +(.)h(.)22 b Ft(36)0 344 y Fs(App)r(endix)i(C)67 b(Examples)13 +b Fb(.)e(.)f(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.) +h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)36 +b Fs(39)149 421 y Ft(C.1)45 b(Blo)q(c)o(k)16 b(diagram)f(of)g(a)g +(lattice)g(\014lter)10 b Fa(.)e(.)g(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h +(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) +h(.)f(.)h(.)25 b Ft(39)149 484 y(C.2)45 b(Filter)16 b(resp)q(onse)g +(graph)e Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h +(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) +f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)30 b Ft(42)149 546 +y(C.3)45 b(Geometric)15 b(construction)t Fa(.)8 b(.)g(.)f(.)h(.)f(.)h +(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.) +f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)19 +b Ft(44)0 670 y Fs(App)r(endix)24 b(D)67 b(Alphab)r(etic)24 +b(listing)g(of)e(commands)7 b Fb(.)j(.)f(.)h(.)g(.)g(.)g(.)30 +b Fs(47)0 811 y(Command)22 b(Index)10 b Fb(.)h(.)f(.)g(.)g(.)g(.)g(.)f +(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)33 +b Fs(53)0 951 y(Concept)22 b(Index)11 b Fb(.)g(.)f(.)g(.)g(.)g(.)g(.)g +(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)34 +b Fs(55)p eop +%%Trailer +end +userdict /end-hook known{end-hook}if +%%EOF diff --git a/Master/texmf-dist/doc/support/texdraw/texdraw_1.html b/Master/texmf-dist/doc/support/texdraw/texdraw_1.html deleted file mode 100644 index 0865cde28b5..00000000000 --- a/Master/texmf-dist/doc/support/texdraw/texdraw_1.html +++ /dev/null @@ -1,82 +0,0 @@ -<HTML> -<HEAD> -<!-- Created by texi2html 1.56k from texdraw.texi on 10 March 2004 --> - -<TITLE>TeXdraw - 1. Introduction</TITLE> -</HEAD> -<BODY> -Go to the first, previous, <A HREF="texdraw_2.html">next</A>, <A HREF="texdraw_11.html">last</A> section, <A HREF="texdraw_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC1" HREF="texdraw_toc.html#TOC1">1. Introduction</A></H1> - -<P> -TeX is a powerful typesetting program which allows for complex text -layouts but by itself lacks a general graphics capability. However, -when coupled with an appropriate printer driver program, external -graphics files can be inserted into the printed document. In this mode, -TeX is instructed to leave space for a drawing. The drawing is -inserted by the printer driver program. The TeXdraw macros described -here generate the external graphics file from within TeX and generate -the instructions to the the print driver program to position the -graphics at the appropriate position on the page. - - -<P> -TeXdraw consists of a set of TeX macros that create line drawings -and other figures. The drawing primitives include solid lines, -patterned lines, Bezier curves, circles and arrows. Other commands -allow for the filling of a region with a gray level. The drawing -commands generate PostScript code. This limits TeXdraw to systems -which use PostScript printers. TeXdraw also provides commands to -position TeX text, including mathematics, on the drawing. The final -drawing, with text and graphics, can be positioned on the page like any -other TeX box. - - -<P> -<A NAME="IDX1"></A> -<A NAME="IDX2"></A> -<A NAME="IDX3"></A> -The basic TeXdraw macros for TeX use the <CODE>\special</CODE> syntax -recognized by the printer driver program <CODE>dvips</CODE>. However, when -invoked as a LaTeX2e package, the TeXdraw macros can be used with -any of the PostScript printer driver programs supported by the standard -<CODE>graphics</CODE> package for LaTeX2e. - - -<P> -The basic TeXdraw macros provide only simple drawing commands. -However, TeXdraw provides a drawing segment environment which allows -parameter changes and coordinate scaling changes to be kept local to the -drawing segment. This facility, together with TeX's macro -capabilities allows one to modularize drawing units and extend -TeXdraw by building more complex graphics entities from simpler -elements. - - - -<UL> -<LI><A HREF="texdraw_1.html#SEC2">Distribution</A> -</UL> - - - -<H2><A NAME="SEC2" HREF="texdraw_toc.html#TOC2">1.1 Distribution information</A></H2> -<P> -<A NAME="IDX4"></A> - - -<P> -The TeXdraw routines are provided free of charge without warranty of -any kind. Note that the TeXdraw routines are copyrighted. They may -be distributed freely provided that the recipients also acquire the -right to distribute them freely. The notices to this effect must be -preserved when the source files are distributed. - - -<P><HR><P> -Go to the first, previous, <A HREF="texdraw_2.html">next</A>, <A HREF="texdraw_11.html">last</A> section, <A HREF="texdraw_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/Master/texmf-dist/doc/support/texdraw/texdraw_10.html b/Master/texmf-dist/doc/support/texdraw/texdraw_10.html deleted file mode 100644 index faa705634dd..00000000000 --- a/Master/texmf-dist/doc/support/texdraw/texdraw_10.html +++ /dev/null @@ -1,126 +0,0 @@ -<HTML> -<HEAD> -<!-- Created by texi2html 1.56k from texdraw.texi on 10 March 2004 --> - -<TITLE>TeXdraw - Command Index</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="texdraw_1.html">first</A>, <A HREF="texdraw_9.html">previous</A>, <A HREF="texdraw_11.html">next</A>, <A HREF="texdraw_11.html">last</A> section, <A HREF="texdraw_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC40" HREF="texdraw_toc.html#TOC40">Command Index</A></H1> -<P> -Jump to: -<A HREF="#findex_\">\</A> -- -<A HREF="#findex_a">a</A> -- -<A HREF="#findex_c">c</A> -- -<A HREF="#findex_f">f</A> -- -<A HREF="#findex_l">l</A> -- -<A HREF="#findex_m">m</A> -- -<A HREF="#findex_n">n</A> -- -<A HREF="#findex_s">s</A> -<P> -<H2><A NAME="findex_\">\</A></H2> -<DIR> -<LI><A HREF="texdraw_2.html#IDX63">\arc</A> -<LI><A HREF="texdraw_2.html#IDX44">\arrowheadsize</A> -<LI><A HREF="texdraw_2.html#IDX43">\arrowheadtype</A> -<LI><A HREF="texdraw_2.html#IDX30">\avec</A> -<LI><A HREF="texdraw_2.html#IDX13">\begin{texdraw}</A> -<LI><A HREF="texdraw_3.html#IDX74">\bsegment</A> -<LI><A HREF="texdraw_2.html#IDX11">\btexdraw</A> -<LI><A HREF="texdraw_2.html#IDX15">\centertexdraw</A> -<LI><A HREF="texdraw_2.html#IDX66">\clvec</A> -<LI><A HREF="texdraw_7.html#IDX177">\cossin</A> -<LI><A HREF="texdraw_7.html#IDX176">\currentpos</A> -<LI><A HREF="texdraw_3.html#IDX94">\drawbb</A> -<LI><A HREF="texdraw_2.html#IDX22">\drawdim</A> -<LI><A HREF="texdraw_2.html#IDX14">\end{texdraw}</A> -<LI><A HREF="texdraw_3.html#IDX75">\esegment</A> -<LI><A HREF="texdraw_2.html#IDX12">\etexdraw</A> -<LI><A HREF="texdraw_2.html#IDX16">\everytexdraw</A> -<LI><A HREF="texdraw_2.html#IDX60">\fcir</A> -<LI><A HREF="texdraw_2.html#IDX62">\fellip</A> -<LI><A HREF="texdraw_7.html#IDX175">\getpos</A> -<LI><A HREF="texdraw_2.html#IDX46">\htext</A> -<LI><A HREF="texdraw_2.html#IDX71">\ifill</A> -<LI><A HREF="texdraw_2.html#IDX59">\lcir</A> -<LI><A HREF="texdraw_2.html#IDX61">\lellip</A> -<LI><A HREF="texdraw_2.html#IDX70">\lfill</A> -<LI><A HREF="texdraw_2.html#IDX41">\linewd</A> -<LI><A HREF="texdraw_2.html#IDX29">\lvec</A> -<LI><A HREF="texdraw_2.html#IDX28">\move</A> -<LI><A HREF="texdraw_6.html#IDX164">\PSarc</A> -<LI><A HREF="texdraw_6.html#IDX166">\PSarcn</A> -<LI><A HREF="texdraw_6.html#IDX153">\PSclosepath</A> -<LI><A HREF="texdraw_6.html#IDX155">\PSfill</A> -<LI><A HREF="texdraw_6.html#IDX159">\PSlineto</A> -<LI><A HREF="texdraw_6.html#IDX161">\PSmoveto</A> -<LI><A HREF="texdraw_6.html#IDX151">\PSnewpath</A> -<LI><A HREF="texdraw_6.html#IDX141">\PSsetlinecap</A> -<LI><A HREF="texdraw_6.html#IDX143">\PSsetlinejoin</A> -<LI><A HREF="texdraw_6.html#IDX149">\PSstroke</A> -<LI><A HREF="texdraw_2.html#IDX34">\ravec</A> -<LI><A HREF="texdraw_7.html#IDX179">\realadd</A> -<LI><A HREF="texdraw_7.html#IDX181">\realdiv</A> -<LI><A HREF="texdraw_7.html#IDX180">\realmult</A> -<LI><A HREF="texdraw_3.html#IDX92">\relsegscale</A> -<LI><A HREF="texdraw_3.html#IDX90">\relunitscale</A> -<LI><A HREF="texdraw_2.html#IDX33">\rlvec</A> -<LI><A HREF="texdraw_2.html#IDX32">\rmove</A> -<LI><A HREF="texdraw_2.html#IDX53">\rtext</A> -<LI><A HREF="texdraw_3.html#IDX83">\savecurrpos</A> -<LI><A HREF="texdraw_3.html#IDX84">\savepos</A> -<LI><A HREF="texdraw_2.html#IDX42">\setgray</A> -<LI><A HREF="texdraw_3.html#IDX91">\setsegscale</A> -<LI><A HREF="texdraw_3.html#IDX89">\setunitscale</A> -<LI><A HREF="texdraw_2.html#IDX54">\textref</A> -<LI><A HREF="texdraw_7.html#IDX178">\vectlen</A> -<LI><A HREF="texdraw_2.html#IDX50">\vtext</A> -<LI><A HREF="texdraw_6.html#IDX167">\writeps</A> -</DIR> -<H2><A NAME="findex_a">a</A></H2> -<DIR> -<LI><A HREF="texdraw_6.html#IDX163">arc</A> -<LI><A HREF="texdraw_6.html#IDX165">arcn</A> -</DIR> -<H2><A NAME="findex_c">c</A></H2> -<DIR> -<LI><A HREF="texdraw_6.html#IDX152">closepath</A> -</DIR> -<H2><A NAME="findex_f">f</A></H2> -<DIR> -<LI><A HREF="texdraw_6.html#IDX154">fill</A> -</DIR> -<H2><A NAME="findex_l">l</A></H2> -<DIR> -<LI><A HREF="texdraw_6.html#IDX158">lineto</A> -</DIR> -<H2><A NAME="findex_m">m</A></H2> -<DIR> -<LI><A HREF="texdraw_6.html#IDX160">moveto</A> -</DIR> -<H2><A NAME="findex_n">n</A></H2> -<DIR> -<LI><A HREF="texdraw_6.html#IDX150">newpath</A> -</DIR> -<H2><A NAME="findex_s">s</A></H2> -<DIR> -<LI><A HREF="texdraw_6.html#IDX140">setlinecap</A> -<LI><A HREF="texdraw_6.html#IDX142">setlinejoin</A> -<LI><A HREF="texdraw_6.html#IDX148">stroke</A> -</DIR> - - -<P><HR><P> -Go to the <A HREF="texdraw_1.html">first</A>, <A HREF="texdraw_9.html">previous</A>, <A HREF="texdraw_11.html">next</A>, <A HREF="texdraw_11.html">last</A> section, <A HREF="texdraw_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/Master/texmf-dist/doc/support/texdraw/texdraw_11.html b/Master/texmf-dist/doc/support/texdraw/texdraw_11.html deleted file mode 100644 index cafff98a536..00000000000 --- a/Master/texmf-dist/doc/support/texdraw/texdraw_11.html +++ /dev/null @@ -1,205 +0,0 @@ -<HTML> -<HEAD> -<!-- Created by texi2html 1.56k from texdraw.texi on 10 March 2004 --> - -<TITLE>TeXdraw - Concept Index</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="texdraw_1.html">first</A>, <A HREF="texdraw_10.html">previous</A>, next, last section, <A HREF="texdraw_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC41" HREF="texdraw_toc.html#TOC41">Concept Index</A></H1> -<P> -Jump to: -<A HREF="#cindex_a">a</A> -- -<A HREF="#cindex_b">b</A> -- -<A HREF="#cindex_c">c</A> -- -<A HREF="#cindex_d">d</A> -- -<A HREF="#cindex_e">e</A> -- -<A HREF="#cindex_f">f</A> -- -<A HREF="#cindex_g">g</A> -- -<A HREF="#cindex_i">i</A> -- -<A HREF="#cindex_l">l</A> -- -<A HREF="#cindex_m">m</A> -- -<A HREF="#cindex_o">o</A> -- -<A HREF="#cindex_p">p</A> -- -<A HREF="#cindex_r">r</A> -- -<A HREF="#cindex_s">s</A> -- -<A HREF="#cindex_t">t</A> -- -<A HREF="#cindex_u">u</A> -- -<A HREF="#cindex_v">v</A> -- -<A HREF="#cindex_w">w</A> -- -<A HREF="#cindex_x">x</A> -<P> -<H2><A NAME="cindex_a">a</A></H2> -<DIR> -<LI><A HREF="texdraw_2.html#IDX5">accessing TeXdraw</A>, <A HREF="texdraw_4.html#IDX97">accessing TeXdraw</A> -<LI><A HREF="texdraw_7.html#IDX170">angle of a vector</A> -<LI><A HREF="texdraw_2.html#IDX58">arcs</A>, <A HREF="texdraw_6.html#IDX162">arcs</A> -<LI><A HREF="texdraw_2.html#IDX40">arrowhead parameters</A> -<LI><A HREF="texdraw_2.html#IDX25">arrows</A> -</DIR> -<H2><A NAME="cindex_b">b</A></H2> -<DIR> -<LI><A HREF="texdraw_2.html#IDX64">Bezier curves</A> -</DIR> -<H2><A NAME="cindex_c">c</A></H2> -<DIR> -<LI><A HREF="texdraw_2.html#IDX55">circles</A> -<LI><A HREF="texdraw_2.html#IDX17">command syntax</A> -<LI><A HREF="texdraw_7.html#IDX168">coordinate parsing</A> -<LI><A HREF="texdraw_2.html#IDX20">coordinate specification</A> -<LI><A HREF="texdraw_3.html#IDX81">coordinate, symbolic</A> -<LI><A HREF="texdraw_2.html#IDX19">coordinates</A> -<LI><A HREF="texdraw_7.html#IDX172">cosine of a vector direction</A> -<LI><A HREF="texdraw_2.html#IDX27">current position</A>, <A HREF="texdraw_3.html#IDX95">current position</A>, <A HREF="texdraw_7.html#IDX169">current position</A> -<LI><A HREF="texdraw_6.html#IDX147">current position in PostScript</A> -<LI><A HREF="texdraw_2.html#IDX65">curves</A> -</DIR> -<H2><A NAME="cindex_d">d</A></H2> -<DIR> -<LI><A HREF="texdraw_2.html#IDX37">dashed lines</A> -<LI><A HREF="texdraw_7.html#IDX171">direction of a line</A> -<LI><A HREF="texdraw_1.html#IDX4">distribution</A> -<LI><A HREF="texdraw_2.html#IDX38">dotted lines</A> -<LI><A HREF="texdraw_3.html#IDX73">drawing segments</A> -<LI><A HREF="texdraw_4.html#IDX106"><CODE>dvi2ps</CODE> printer driver</A> -<LI><A HREF="texdraw_4.html#IDX107"><CODE>dvialw</CODE> printer driver</A> -<LI><A HREF="texdraw_4.html#IDX108"><CODE>dvilaser</CODE> printer driver</A> -<LI><A HREF="texdraw_1.html#IDX1"><CODE>dvips</CODE> printer driver</A>, <A HREF="texdraw_4.html#IDX104"><CODE>dvips</CODE> printer driver</A>, <A HREF="texdraw_5.html#IDX134"><CODE>dvips</CODE> printer driver</A> -<LI><A HREF="texdraw_4.html#IDX109"><CODE>dvipsone</CODE> printer driver</A> -<LI><A HREF="texdraw_4.html#IDX111"><CODE>dvitops</CODE> printer driver</A> -<LI><A HREF="texdraw_4.html#IDX110"><CODE>dviwindo</CODE> printer driver</A> -</DIR> -<H2><A NAME="cindex_e">e</A></H2> -<DIR> -<LI><A HREF="texdraw_2.html#IDX57">ellipses</A> -<LI><A HREF="texdraw_5.html#IDX126">Encapsulated PostScript File</A> -<LI><A HREF="texdraw_5.html#IDX120">errors while using TeXdraw</A> -<LI><A HREF="texdraw_7.html#IDX182">example, arrow curve</A> -<LI><A HREF="texdraw_8.html#IDX183">example, block diagram</A> -<LI><A HREF="texdraw_8.html#IDX185">example, circle and ellipse</A> -<LI><A HREF="texdraw_8.html#IDX184">example, graph</A> -</DIR> -<H2><A NAME="cindex_f">f</A></H2> -<DIR> -<LI><A HREF="texdraw_3.html#IDX76">fill operations, interaction with drawing segments</A> -<LI><A HREF="texdraw_2.html#IDX56">filled circles</A> -<LI><A HREF="texdraw_2.html#IDX67">filling regions</A>, <A HREF="texdraw_6.html#IDX145">filling regions</A> -</DIR> -<H2><A NAME="cindex_g">g</A></H2> -<DIR> -<LI><A HREF="texdraw_1.html#IDX3"><CODE>graphics</CODE> package</A>, <A HREF="texdraw_2.html#IDX10"><CODE>graphics</CODE> package</A>, <A HREF="texdraw_4.html#IDX103"><CODE>graphics</CODE> package</A>, <A HREF="texdraw_5.html#IDX131"><CODE>graphics</CODE> package</A> -<LI><A HREF="texdraw_5.html#IDX127">graphics placement</A> -<LI><A HREF="texdraw_2.html#IDX39">gray levels for lines</A> -</DIR> -<H2><A NAME="cindex_i">i</A></H2> -<DIR> -<LI><A HREF="texdraw_5.html#IDX121">implementation</A> -<LI><A HREF="texdraw_3.html#IDX96">initial current position</A> -<LI><A HREF="texdraw_2.html#IDX6">invoking TeXdraw</A>, <A HREF="texdraw_4.html#IDX98">invoking TeXdraw</A> -</DIR> -<H2><A NAME="cindex_l">l</A></H2> -<DIR> -<LI><A HREF="texdraw_1.html#IDX2">LaTeX</A>, <A HREF="texdraw_2.html#IDX8">LaTeX</A>, <A HREF="texdraw_4.html#IDX99">LaTeX</A> -<LI><A HREF="texdraw_7.html#IDX174">length of a vector</A> -<LI><A HREF="texdraw_6.html#IDX138">line cap</A> -<LI><A HREF="texdraw_6.html#IDX139">line join</A> -<LI><A HREF="texdraw_2.html#IDX35">line width</A> -<LI><A HREF="texdraw_2.html#IDX23">lines</A>, <A HREF="texdraw_6.html#IDX156">lines</A> -<LI><A HREF="texdraw_9.html#IDX186">listing of commands</A> -</DIR> -<H2><A NAME="cindex_m">m</A></H2> -<DIR> -<LI><A HREF="texdraw_2.html#IDX26">moves</A>, <A HREF="texdraw_6.html#IDX157">moves</A> -</DIR> -<H2><A NAME="cindex_o">o</A></H2> -<DIR> -<LI><A HREF="texdraw_4.html#IDX112"><CODE>oztex</CODE> printer driver</A> -</DIR> -<H2><A NAME="cindex_p">p</A></H2> -<DIR> -<LI><A HREF="texdraw_2.html#IDX68">painting regions</A> -<LI><A HREF="texdraw_2.html#IDX69">paths</A>, <A HREF="texdraw_3.html#IDX77">paths</A>, <A HREF="texdraw_6.html#IDX146">paths</A> -<LI><A HREF="texdraw_4.html#IDX115"><CODE>pctexps</CODE> printer driver</A> -<LI><A HREF="texdraw_4.html#IDX116"><CODE>pctexwin</CODE> printer driver</A> -<LI><A HREF="texdraw_5.html#IDX129">placement of graphics and text</A> -<LI><A HREF="texdraw_2.html#IDX7">plain TeX</A> -<LI><A HREF="texdraw_2.html#IDX21">position specification</A> -<LI><A HREF="texdraw_3.html#IDX80">positions, saving</A> -<LI><A HREF="texdraw_6.html#IDX137">PostScript commands</A> -<LI><A HREF="texdraw_4.html#IDX102">PostScript printer drivers</A>, <A HREF="texdraw_5.html#IDX132">PostScript printer drivers</A> -<LI><A HREF="texdraw_4.html#IDX101">printer drivers</A>, <A HREF="texdraw_5.html#IDX133">printer drivers</A> -<LI><A HREF="texdraw_5.html#IDX119">problems while using TeXdraw</A> -<LI><A HREF="texdraw_4.html#IDX113"><CODE>psprint</CODE> driver</A> -</DIR> -<H2><A NAME="cindex_r">r</A></H2> -<DIR> -<LI><A HREF="texdraw_2.html#IDX31">relative positioning</A> -<LI><A HREF="texdraw_3.html#IDX86">relative scaling</A> -<LI><A HREF="texdraw_5.html#IDX123">resolution</A> -<LI><A HREF="texdraw_2.html#IDX48">rotated text</A>, <A HREF="texdraw_2.html#IDX51">rotated text</A>, <A HREF="texdraw_4.html#IDX117">rotated text</A>, <A HREF="texdraw_5.html#IDX124">rotated text</A>, <A HREF="texdraw_5.html#IDX135">rotated text</A> -</DIR> -<H2><A NAME="cindex_s">s</A></H2> -<DIR> -<LI><A HREF="texdraw_3.html#IDX79">saving positions</A> -<LI><A HREF="texdraw_5.html#IDX122">scaling</A> -<LI><A HREF="texdraw_3.html#IDX85">scaling coordinates</A> -<LI><A HREF="texdraw_3.html#IDX87">segment scale</A> -<LI><A HREF="texdraw_3.html#IDX72">segments</A> -<LI><A HREF="texdraw_7.html#IDX173">sine of a vector direction</A> -<LI><A HREF="texdraw_3.html#IDX93">size of the drawing</A> -<LI><A HREF="texdraw_3.html#IDX78">stroking lines</A>, <A HREF="texdraw_6.html#IDX144">stroking lines</A> -<LI><A HREF="texdraw_3.html#IDX82">symbolic coordinate</A> -<LI><A HREF="texdraw_2.html#IDX18">syntax of commands</A> -</DIR> -<H2><A NAME="cindex_t">t</A></H2> -<DIR> -<LI><A HREF="texdraw_2.html#IDX9"><CODE>texdraw</CODE> package</A>, <A HREF="texdraw_4.html#IDX100"><CODE>texdraw</CODE> package</A>, <A HREF="texdraw_5.html#IDX130"><CODE>texdraw</CODE> package</A> -<LI><A HREF="texdraw_2.html#IDX45">text commands</A> -<LI><A HREF="texdraw_5.html#IDX128">text placement</A> -<LI><A HREF="texdraw_2.html#IDX49">text rotation</A>, <A HREF="texdraw_2.html#IDX52">text rotation</A>, <A HREF="texdraw_4.html#IDX118">text rotation</A>, <A HREF="texdraw_5.html#IDX125">text rotation</A>, <A HREF="texdraw_5.html#IDX136">text rotation</A> -<LI><A HREF="texdraw_4.html#IDX114"><CODE>textures</CODE> printer driver</A> -</DIR> -<H2><A NAME="cindex_u">u</A></H2> -<DIR> -<LI><A HREF="texdraw_3.html#IDX88">unit scale</A> -</DIR> -<H2><A NAME="cindex_v">v</A></H2> -<DIR> -<LI><A HREF="texdraw_2.html#IDX24">vectors</A> -<LI><A HREF="texdraw_2.html#IDX47">vertical text</A> -</DIR> -<H2><A NAME="cindex_w">w</A></H2> -<DIR> -<LI><A HREF="texdraw_2.html#IDX36">width of lines</A> -</DIR> -<H2><A NAME="cindex_x">x</A></H2> -<DIR> -<LI><A HREF="texdraw_4.html#IDX105"><CODE>xdvi</CODE> driver</A> -</DIR> - - -<P><HR><P> -Go to the <A HREF="texdraw_1.html">first</A>, <A HREF="texdraw_10.html">previous</A>, next, last section, <A HREF="texdraw_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/Master/texmf-dist/doc/support/texdraw/texdraw_2.html b/Master/texmf-dist/doc/support/texdraw/texdraw_2.html deleted file mode 100644 index 25abbb1af0e..00000000000 --- a/Master/texmf-dist/doc/support/texdraw/texdraw_2.html +++ /dev/null @@ -1,882 +0,0 @@ -<HTML> -<HEAD> -<!-- Created by texi2html 1.56k from texdraw.texi on 10 March 2004 --> - -<TITLE>TeXdraw - 2. Using the TeXdraw Commands</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="texdraw_1.html">first</A>, <A HREF="texdraw_1.html">previous</A>, <A HREF="texdraw_3.html">next</A>, <A HREF="texdraw_11.html">last</A> section, <A HREF="texdraw_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC3" HREF="texdraw_toc.html#TOC3">2. Using the TeXdraw Commands</A></H1> - -<P> -The main TeXdraw macros (commands) are defined in the file -<TT>`texdraw.tex'</TT>. These macros may be used directly in TeX. The -file <TT>`texdraw.sty'</TT> provides an interface for use with LaTeX2e. -The following sections describe the basic commands for TeXdraw. - - - -<UL> -<LI><A HREF="texdraw_2.html#SEC4">Accessing TeXdraw</A> -<LI><A HREF="texdraw_2.html#SEC5">Command syntax</A> -<LI><A HREF="texdraw_2.html#SEC6">TeXdraw coordinates</A> -<LI><A HREF="texdraw_2.html#SEC7">Coordinate specification</A> -<LI><A HREF="texdraw_2.html#SEC8">Line vectors</A> -<LI><A HREF="texdraw_2.html#SEC9">TeX text</A> -<LI><A HREF="texdraw_2.html#SEC10">Circles and arcs</A> -<LI><A HREF="texdraw_2.html#SEC11">Bezier curves</A> -<LI><A HREF="texdraw_2.html#SEC12">Fill commands</A> -</UL> - - - -<H2><A NAME="SEC4" HREF="texdraw_toc.html#TOC4">2.1 Accessing TeXdraw</A></H2> -<P> -<A NAME="IDX5"></A> -<A NAME="IDX6"></A> - - -<P> -<A NAME="IDX7"></A> -<A NAME="IDX8"></A> -The form of the user command to run the TeX program depends on which -version of TeX is being used, and which other macro packages are -preloaded as format files. Typically, installations have at least two -versions of TeX -- plain TeX which includes basic typesetting -macros (usually invoked as <TT>`tex'</TT>) and LaTeX2e which includes the -LaTeX2e typesetting macros (usually invoked as <TT>`latex'</TT>). An -older version of LaTeX, version 2.09, may also be available. The -TeXdraw macros can be used with plain TeX and with either version -of LaTeX. - - -<P> -For use with plain TeX, the user must read in the TeXdraw macros -from the file <TT>`texdraw.tex'</TT>. - -<PRE> -\input texdraw % Read in the TeXdraw macros - ... -\btexdraw - ... % TeXdraw commands to generate a drawing -\etexdraw -</PRE> - -<P> -For use with LaTeX version 2.09, the user reads in the TeXdraw -macros from the file <TT>`texdraw.tex'</TT> and optionally defines the -<CODE>\begin{texdraw}</CODE> / <CODE>\end{texdraw}</CODE> environment. - -<PRE> -\documentstyle[11pt]{article} % Article style with the 11pt size options -... -\input texdraw % Read in the TeXdraw macros -\newenvironment{texdraw}{\leavevmode\btexdraw}{\etexdraw} - ... -\begin{texdraw} - ... % TeXdraw commands to generate a drawing -\end{texdraw} -... -\end{document} -</PRE> - -<P> -<A NAME="IDX9"></A> -<A NAME="IDX10"></A> -For use with LaTeX2e, the user must load the <CODE>texdraw</CODE> package -(file <TT>`texdraw.sty'</TT>). This package file defines the -<CODE>\begin{texdraw}</CODE> / <CODE>\end{texdraw}</CODE> environment, brings in -the standard <CODE>graphics</CODE> package and reads in the file -<TT>`texdraw.tex'</TT> containing the definitions of the TeXdraw macros. - -<PRE> -\documentclass[11pt]{article} % Article class with the 11pt size option -\usepackage{texdraw} % TeXdraw commands - -\begin{document} - ... -\begin{texdraw} - ... % TeXdraw commands to generate a drawing -\end{texdraw} - ... -\end{document} -</PRE> - -<P> -As the TeXdraw commands are processed by TeX, an intermediate -PostScript file is generated. The intermediate PostScript has a name of -the form <TT>`<VAR>name</VAR>.ps1'</TT>. The name part is derived from the name -of the main TeX file being processed. If more than one drawing is -produced, the digit in the file name extension is -incremented.<A NAME="DOCF1" HREF="texdraw_foot.html#FOOT1">(1)</A> - - -<P> -The TeXdraw commands to produce a drawing are inserted between -<CODE>\btexdraw</CODE> and <CODE>\etexdraw</CODE> commands, or for LaTeX, between -<CODE>\begin{texdraw}</CODE> and <CODE>\end{texdraw}</CODE> commands. This -results in a TeX box of appropriate size containing the drawing -generated by the TeXdraw commands. The TeXdraw box can be -positioned in a document like any other TeX box. - - -<P> -The <CODE>\centertexdraw{...}</CODE> macro centers the box generated by -TeXdraw. The vertical space taken up is equal to the vertical size -of the drawing. The <CODE>\centertexdraw</CODE> macro is normally used in -vertical mode (between paragraphs). A <CODE>\par</CODE> command (a blank line -will do also) before a <CODE>\centertexdraw</CODE> command will terminate -horizontal mode and return to vertical mode. For LaTeX, a structured -equivalent to the <CODE>\centertexdraw{...}</CODE> command is shown below. - -<PRE> -\begin{center} -\begin{texdraw} - ... -\end{texdraw} -\end{center} -</PRE> - -<P> -The <CODE>\everytexdraw</CODE> command can be used to define a set of -TeXdraw commands that will be executed at the beginning of every -TeXdraw drawing. It is invoked as <CODE>\everytexdraw{ ...}</CODE>, -with the desired TeXdraw commands as arguments. - - -<DL COMPACT> - -<DT><CODE>\btexdraw</CODE> -<DD> -<A NAME="IDX11"></A> - -Start a TeXdraw drawing. The drawing is terminated with an -<CODE>\etexdraw</CODE> command. -<A NAME="IDX12"></A> -<DT><CODE>\etexdraw</CODE> -<DD> -End a TeXdraw drawing started with a <CODE>\btexdraw</CODE> command. The -resulting TeXdraw drawing is placed in a box with height equal to the -height of the drawing and width equal to the width of the drawing. The -depth of the box is zero. -<A NAME="IDX13"></A> -<DT><CODE>\begin{texdraw}</CODE> -<DD> -Start a TeXdraw drawing. The drawing is terminated with an -<CODE>\end{texdraw}</CODE> command. This command is for use with LaTeX. -<A NAME="IDX14"></A> -<DT><CODE>\end{texdraw}</CODE> -<DD> -End a TeXdraw drawing started with a <CODE>\begin{texdraw}</CODE> -command. The resulting TeXdraw drawing is placed in a box with -height equal to the height of the drawing and width equal to the width -of the drawing. The depth of the box is zero. This command is for use -with LaTeX. -<A NAME="IDX15"></A> -<DT><CODE>\centertexdraw{ ... }</CODE> -<DD> -Center a TeXdraw box horizontally. The argument contains TeXdraw -commands. The resulting box has the horizontal size <CODE>\hsize</CODE> and -height equal to the height of the drawing. -<A NAME="IDX16"></A> -<DT><CODE>\everytexdraw{ ... }</CODE> -<DD> -Specify TeXdraw commands to be executed at the beginning of every -TeXdraw drawing. -</DL> - - - -<H2><A NAME="SEC5" HREF="texdraw_toc.html#TOC5">2.2 Command syntax</A></H2> -<P> -<A NAME="IDX17"></A> -<A NAME="IDX18"></A> - - -<P> -Generally TeXdraw commands that take a single argument need a -terminating blank or newline after the argument. Arguments that are -self-delimiting, such as coordinates within parentheses and text within -braces, do not need the terminating blank. However, even when not -needed by the defining syntax of the command, blanks following command -arguments are allowed and ignored within the TeXdraw environment. - - -<P> -On entering the TeXdraw environment, TeX is in internal vertical -mode (vertical mode inside a <CODE>\vbox</CODE>). In this mode, spaces can be -placed freely between commands. However, any other extraneous input -that generates output that is not part of the TeXdraw environment is -disallowed. - - -<P> -Blank lines are interpreted as paragraph breaks, equivalent to a -<CODE>\par</CODE> command. The TeXdraw macro <CODE>\centertexdraw</CODE> is -defined with the <CODE>\long</CODE> attribute to allow <CODE>\par</CODE> commands -and blank lines to be interspersed between TeXdraw commands. The -<CODE>\btexdraw</CODE> and <CODE>\etexdraw</CODE> commands also allow <CODE>\par</CODE> -command and blank lines to be included. - - - - -<H2><A NAME="SEC6" HREF="texdraw_toc.html#TOC6">2.3 TeXdraw coordinates</A></H2> -<P> -<A NAME="IDX19"></A> - - -<P> -The TeXdraw coordinate system has increasing <VAR>x</VAR> to the right and -increasing <VAR>y</VAR> upward. The coordinates (without the unit) are -floating point numbers. Integer values can be written without a decimal -point. The size of the drawing is determined by the maximum excursions -of the coordinates specified in TeXdraw commands. - - -<P> -Consider the following example of TeXdraw commands to draw a simple -figure. - -<PRE> -\centertexdraw{ - \drawdim cm \linewd 0.02 - \move(2 2) \lvec(3 3) \lvec(2 4) \lvec(1 3) \lvec(2 2) - \textref h:C v:C \htext(2 3){$\sum \rho_n$} -} -</PRE> - -<P> -This drawing uses units of centimetres, with a line width of 0.02 cm. -The <VAR>x</VAR> coordinate ranges between 1 and 3 while the <VAR>y</VAR> -coordinate ranges between 2 and 4. When included into a document, the -size of the drawing is 2 cm by 2 cm. The drawing is placed in a TeX -box, with the lower lefthand corner of the box corresponding to -TeXdraw coordinate <CODE>(1 2)</CODE> and the upper righthand corner at -<CODE>(3 4)</CODE>. The <CODE>\centertexdraw</CODE> command centers the drawing -horizontally. The <CODE>\textref</CODE> command controls the centering of the -text. The text in this drawing is centered (both horizontally and -vertically) at the coordinate <CODE>(2 3)</CODE>. - - - - -<H2><A NAME="SEC7" HREF="texdraw_toc.html#TOC7">2.4 Coordinate specification</A></H2> -<P> -<A NAME="IDX20"></A> -<A NAME="IDX21"></A> - - -<P> -Coordinates are specified within parentheses, with blanks (but no comma) -between the values. Leading blanks and trailing blanks are permitted -within the parentheses. The coordinates refer to units, which are -specified by the <CODE>\drawdim</CODE> command. The default is inches, but -any valid TeX dimension unit can be specified. Symbolic -specification of saved coordinate values will be discused later -(see section <A HREF="texdraw_3.html#SEC16">3.3 Saving positions</A>). - - -<DL COMPACT> - -<DT><CODE>\drawdim <VAR>dim</VAR></CODE> -<DD> -<A NAME="IDX22"></A> - -Set the units to <VAR>dim</VAR>. The argument <VAR>dim</VAR> can be any valid -TeX dimension unit. The units are used to interpret coordinate -values. Examples of valid units: <CODE>cm</CODE>, <CODE>mm</CODE>, <CODE>in</CODE>, -<CODE>pt</CODE>, and <CODE>bp</CODE>. -</DL> - -<P> -Examples of coordinate and scaling specifications: -<DL COMPACT> - -<DT><CODE>\drawdim {cm} \move(2 2)</CODE> -<DD> -Set the units to centimetres, move to a position 2 cm to the right and 2 -cm up from the origin of the drawing coordinate system. -<DT><CODE>\drawdim bp</CODE> -<DD> -Set the units to big points. -<DT><CODE>\lvec ( 2.2 +5.5) \lvec(2.3 -2) \lvec(2.2 5.4 )</CODE> -<DD> -Examples of acceptable coordinate specifications. -</DL> - - - -<H2><A NAME="SEC8" HREF="texdraw_toc.html#TOC8">2.5 Line vectors</A></H2> -<P> -<A NAME="IDX23"></A> -<A NAME="IDX24"></A> -<A NAME="IDX25"></A> -<A NAME="IDX26"></A> -<A NAME="IDX27"></A> - - -<P> -TeXdraw implements moves, line vectors and arrow vectors. There are -both absolute and relative motion versions of these vector commands. -TeXdraw maintains a current position. Lines are drawn from the -current position to a new coordinate, with the new coordinate becoming -the new current position. An explicit move can be used to establish a -new current position. The position <CODE>(0 0)</CODE> is used if there is no -move to an initial current position. - - -<P> -The <CODE>\move</CODE> and <CODE>\rmove</CODE> commands establish a new current -position without drawing a line. The <CODE>\lvec</CODE> and <CODE>\rlvec</CODE> -commands draw a line from the current position to a new position, which -then becomes the new current position. The <CODE>\avec</CODE> and -<CODE>\ravec</CODE> commands draw a line with an arrowhead from the current -position to a new coordinate, which then becomes the new current -position. The tip of the arrow is at the new current position. The -direction of the arrow follows the direction of the line. Since this -direction is undefined for zero length vectors, these are not allowed -for <CODE>\avec</CODE> or <CODE>\ravec</CODE>. Zero length arrow vectors will -generate a PostScript print error: <CODE>undefinedresult</CODE>. For any -non-zero length vector, the full size arrowhead is drawn, even if that -arrowhead is longer than the line length. - - -<P> -The absolute motion versions of these commands specify the coordinate of -the final position. - - -<DL COMPACT> - -<DT><CODE>\move (<VAR>x</VAR> <VAR>y</VAR>)</CODE> -<DD> -<A NAME="IDX28"></A> - -Move to coordinate <CODE>(<VAR>x</VAR> <VAR>y</VAR>)</CODE>. The new current position -is <CODE>(<VAR>x</VAR> <VAR>y</VAR>)</CODE>. -<A NAME="IDX29"></A> -<DT><CODE>\lvec (<VAR>x</VAR> <VAR>y</VAR>)</CODE> -<DD> -Draw a line from the current position to coordinate <CODE>(<VAR>x</VAR> -<VAR>y</VAR>)</CODE>. The new current position is <CODE>(<VAR>x</VAR> <VAR>y</VAR>)</CODE>. -<A NAME="IDX30"></A> -<DT><CODE>\avec (<VAR>x</VAR> <VAR>y</VAR>)</CODE> -<DD> -Draw a line with an arrowhead from the current position to -<CODE>(<VAR>x</VAR> <VAR>y</VAR>)</CODE>. The new current position is <CODE>(<VAR>x</VAR> -<VAR>y</VAR>)</CODE>. The arrowhead is aligned with the line, with the tip at -<CODE>(<VAR>x</VAR> <VAR>y</VAR>)</CODE>. -</DL> - -<P> -<A NAME="IDX31"></A> -The relative motion versions of these commands interpret the coordinates -as displacements relative to the current position. Given the -displacements <CODE>(<VAR>dx</VAR> <VAR>dy</VAR>)</CODE> as a parameter, each of the -relative motion commands moves <VAR>dx</VAR> units in the <VAR>x</VAR> direction -and <VAR>dy</VAR> units in the <VAR>y</VAR> direction. - - -<DL COMPACT> - -<DT><CODE>\rmove (<VAR>dx</VAR> <VAR>dy</VAR>)</CODE> -<DD> -<A NAME="IDX32"></A> - -Move from the current position, <VAR>dx</VAR> units in the <VAR>x</VAR> direction -and <VAR>dy</VAR> units in the <VAR>y</VAR> direction. The final position becomes -the new current position. -<A NAME="IDX33"></A> -<DT><CODE>\rlvec (<VAR>dx</VAR> <VAR>dy</VAR>)</CODE> -<DD> -Draw a line from the current position, <VAR>dx</VAR> units in the <VAR>x</VAR> -direction and <VAR>dy</VAR> units in the <VAR>y</VAR> direction. The final -position becomes the new current position. -<A NAME="IDX34"></A> -<DT><CODE>\ravec (<VAR>dx</VAR> <VAR>dy</VAR>)</CODE> -<DD> -Draw a line with an arrowhead from the current position, <VAR>dx</VAR> units -in the <VAR>x</VAR> direction and <VAR>y</VAR> units in the <VAR>y</VAR> direction. -The final position becomes the new current position. The arrowhead is -aligned with the line, with the tip at the new current position. -</DL> - -<P> -Lines can be customized with commands to change the line width, line -pattern and line gray level rendition. In addition, commands for -changing the type and size of the arrowhead are available. - - -<P> -<A NAME="IDX35"></A> -<A NAME="IDX36"></A> -<A NAME="IDX37"></A> -<A NAME="IDX38"></A> -<A NAME="IDX39"></A> -<A NAME="IDX40"></A> -<DL COMPACT> - -<DT><CODE>\linewd <VAR>width</VAR></CODE> -<DD> -<A NAME="IDX41"></A> - -Set the line width to <VAR>width</VAR> units. Initially <VAR>width</VAR> is 0.01 -inches (corresponding to 3 pixels at 300 pixels to the inch). -<DT><CODE>\lpatt (<VAR>pattern</VAR>)</CODE> -<DD> -Set lines to have the pattern <CODE>(<VAR>pattern</VAR>)</CODE>. A pattern is a -sequence of on/off lengths separated by blanks and enclosed in parentheses. -The lengths alternately specify the length of a dash and the length of a -gap between dashes. Each length is interpreted using the current -scaling and drawing units. The pattern is used cyclically. The empty -pattern signifies a solid line. The initial line pattern is a solid -line, corresponding to the empty pattern <CODE>\lpatt ()</CODE>. -<A NAME="IDX42"></A> -<DT><CODE>\setgray <VAR>level</VAR></CODE> -<DD> -Set the gray level of lines. Gray levels are real values from 0 (black) -through intermediate values (gray) to 1 (white). The initial gray level -is 0 corresponding to black. -<A NAME="IDX43"></A> -<DT><CODE>\arrowheadtype t:<VAR>type</VAR></CODE> -<DD> -Set the arrowhead type to <VAR>type</VAR>, where <VAR>type</VAR> is one of -<CODE>F</CODE>, <CODE>T</CODE>, <CODE>W</CODE>, <CODE>V</CODE>, or <CODE>H</CODE>. There are two -kinds of arrowheads. The first kind is a triangle. There are 3 -variants: type <CODE>T</CODE> is an empty triangle, type <CODE>F</CODE> is a filled -triangle (using the current gray level for lines), type <CODE>W</CODE> is a -triangle filled with white. The second kind of arrowhead is an open -ended Vee. There are 2 variants: type <CODE>V</CODE> has the stem continue to -the tip, type <CODE>H</CODE> has the stem stop at the base of the arrowhead. -The initial arrowhead type is <CODE>T</CODE>. -<A NAME="IDX44"></A> -<DT><CODE>\arrowheadsize l:<VAR>length</VAR> w:<VAR>width</VAR></CODE> -<DD> -Set the arrowhead size to be <VAR>length</VAR> units long and <VAR>width</VAR> -units wide. The width is measured across the "base" of the arrowhead. -The initial arrowhead size has a <VAR>length</VAR> of 0.16 inches and a -<VAR>width</VAR> of 0.08 inches. -</DL> - -<P> -Note that the lines which outline the arrowhead will be drawn with the -same line pattern used for the stem. Normally, arrow vectors are drawn -with the line pattern set for a solid line. Note that the fill level -used for the <CODE>F</CODE> variant of the arrowhead uses the same gray level -as used for lines. The difference between the <CODE>T</CODE> variant and the -<CODE>W</CODE> variant only shows up if the arrowhead is placed over non-white -areas of the drawing. The <CODE>W</CODE> variant obliterates the area under -the arrowhead. - - -<P> -Examples of line parameter and arrowhead settings are shown in the -following code. - -<PRE> -\centertexdraw{ - \drawdim in - \linewd 0.03 \setgray 0.6 \arrowheadtype t:F \avec(0 0.5) - \linewd 0.01 \setgray 0 \arrowheadtype t:V \avec(0.5 0.5) - \linewd 0.015 \lpatt(0.067 0.1) \lvec (1 0) - \linewd 0.02 \lpatt() \arrowheadtype t:T \avec(1.5 0.5) - \arrowheadtype t:H \avec(2.0 0.5) - \setgray 0.4 \arrowheadtype t:W \avec(3.0 0) -} -</PRE> - - - -<H2><A NAME="SEC9" HREF="texdraw_toc.html#TOC9">2.6 TeX text</A></H2> -<P> -<A NAME="IDX45"></A> - - -<P> -Text may be superimposed on the drawing. The text argument of the -<CODE>\htext</CODE> command is in horizontal mode. This text can be ordinary -text, math mode expressions, or even more complicated boxes consisting -of tables and the like. The resulting TeX text is placed in a box. -The reference point of the box can be chosen to be one of nine -locations: horizontally left, center or right; vertically top, center or -bottom. The <CODE>\htext</CODE> command takes one of two forms. - - -<DL COMPACT> - -<DT><CODE>\htext (<VAR>x</VAR> <VAR>y</VAR>){<VAR>text</VAR>}</CODE> -<DD> -<A NAME="IDX46"></A> - -<DT><CODE>\htext {<VAR>text</VAR>}</CODE> -<DD> -The first form of this command places the TeX text <VAR>text</VAR> -horizontally with the text reference point at the coordinate -<CODE>(<VAR>x</VAR> <VAR>y</VAR>)</CODE>. The new current position is <CODE>(<VAR>x</VAR> -<VAR>y</VAR>)</CODE>. The second form of this command places the TeX text -<VAR>text</VAR> horizontally with the text reference point at the current -position. The text reference point is set with the <CODE>\textref</CODE> -command. -</DL> - -<P> -<A NAME="IDX47"></A> -<A NAME="IDX48"></A> -<A NAME="IDX49"></A> -Text can be placed vertically using the <CODE>\vtext</CODE> command. The text -argument is in horizontal mode. The TeX text is placed in a box and -then rotated counterclockwise. The reference point is the point in the -box, <EM>before</EM> rotation of the text. Not all PostScript printer -drivers support vertical text. - - -<DL COMPACT> - -<DT><CODE>\vtext (x y){<VAR>text</VAR>}</CODE> -<DD> -<A NAME="IDX50"></A> - -<DT><CODE>\vtext {<VAR>text</VAR>}</CODE> -<DD> -The first form of this command places the TeX text <VAR>text</VAR> -vertically with the text reference point at the coordinate -<CODE>(<VAR>x</VAR> <VAR>y</VAR>)</CODE>. The new current position is <CODE>(<VAR>x</VAR> -<VAR>y</VAR>)</CODE>. The second form of this command places the TeX text -<VAR>text</VAR> vertically with the text reference point at the current -position. In both cases, the TeX text is placed in a box and the box -is rotated counterclockwise by 90 degrees about the text reference -point. The text reference point is set with the <CODE>\textref</CODE> -command. -</DL> - -<P> -<A NAME="IDX51"></A> -<A NAME="IDX52"></A> -Text can be placed at an arbitrary angle using the <CODE>\rtext</CODE> -command. The text argument is in horizontal mode. The TeX text is -placed in a box and then rotated counterclockwise. The reference point -is the point in the box, <EM>before</EM> rotation of the text. Not all -PostScript printer drivers support rotated text. - - -<DL COMPACT> - -<DT><CODE>\rtext td:<VAR>angle</VAR> (x y){<VAR>text</VAR>}</CODE> -<DD> -<A NAME="IDX53"></A> - -<DT><CODE>\rtext td:<VAR>angle</VAR> {<VAR>text</VAR>}</CODE> -<DD> -The first form of this command places the TeX text <VAR>text</VAR> at an -angle with the text reference point at the coordinate <CODE>(<VAR>x</VAR> -<VAR>y</VAR>)</CODE>. The new current position is <CODE>(<VAR>x</VAR> <VAR>y</VAR>)</CODE>. The -second form of this command places the TeX text <VAR>text</VAR> at an -angle with the text reference point at the current position. In both -cases, the TeX text is placed in a box and the box is rotated -counterclockwise by <VAR>angle</VAR> degrees about the text reference point. -The text reference point is set with the <CODE>\textref</CODE> command. -</DL> - -<P> -The reference point for subsequent TeX text in a <CODE>\htext</CODE>, -<CODE>\vtext</CODE> or <CODE>\rtext</CODE> command is set with the <CODE>\textref</CODE> -command. - - -<DL COMPACT> - -<DT><CODE>\textref h:<VAR>h-ref</VAR> v:<VAR>v-ref</VAR></CODE> -<DD> -<A NAME="IDX54"></A> - -Set the text reference point for subsequent text commands. The -horizontal reference point <VAR>h-ref</VAR> is one of <CODE>L</CODE>, <CODE>C</CODE> or -<CODE>R</CODE> (left, center or right). The vertical reference point -<VAR>v-ref</VAR> is one of <CODE>T</CODE>, <CODE>C</CODE> or <CODE>B</CODE> (top, center or -bottom). For rotated text, the reference point is determined before -rotation. The initial text reference point corresponds to -<CODE>\textref h:L v:B</CODE>. -</DL> -<P> - - -<P> -The font used to render the text is determined as for any other TeX -text. Normally the font used outside of TeXdraw is in effect. If -desired, other fonts can be specified as part of the text. Any font -changes within a TeXdraw text command remain local to that command. - - -<P> -Only the coordinate of the text reference point in a <CODE>\htext</CODE>, -<CODE>\vtext</CODE> or <CODE>\rtext</CODE> command is used in calculating the size -of the drawing. This means that text itself can spill outside of the -drawing area determined by TeXdraw. The area of the drawing can be -increased to include the text by issuing additional <CODE>\move</CODE> -commands. - - - -<PRE> -\centertexdraw{ - \avec(-0.75 -0.25) \textref h:R v:C \htext{H-text} - \move(0 0) \avec(-0.75 +0.25) \textref h:R v:B \htext{H-text} - \move(0 0) \avec(0 +0.5) \textref h:L v:T \vtext{V-text} - \move(0 0) \avec(+0.75 +0.25) \textref h:L v:B \htext{H-text} - \move(0 0) \avec(+0.75 -0.25) \textref h:L v:C \htext{H-text} -} -</PRE> - - - -<H2><A NAME="SEC10" HREF="texdraw_toc.html#TOC10">2.7 Circles, ellipses and arcs</A></H2> -<P> -<A NAME="IDX55"></A> -<A NAME="IDX56"></A> -<A NAME="IDX57"></A> -<A NAME="IDX58"></A> - - -<P> -TeXdraw supplies commands to generate circles, ellipses and arcs. -There are two forms of the circle command. The <CODE>\lcir</CODE> command -draws a circle of given radius. The <CODE>\fcir</CODE> command draws a filled -circle. In the latter case, the circle is filled by a specified gray -level. For the filled circle, the line defining the circumference of -the circle is not drawn. Note that the gray level area filled in by the -<CODE>\fcir</CODE> command is opaque, even if the fill is chosen to be white. -For either form of the circle command, the drawing size is increased if -necessary to contain the circle. - - -<P> -The <CODE>\lellip</CODE> command generates an ellipse specified by the radius -of the ellipse in the <VAR>x</VAR> direction and the radius of the ellipse in -the <VAR>y</VAR> direction. The ellipse is symmetrical about horizontal and -vertical lines drawn through the current point. The <CODE>\fellip</CODE> -command draws a filled ellipse. In the latter case, the ellipse is -filled by a specified gray level. For the filled ellipse, the line -defining the boundary of the ellipse is not drawn. For either form of -the ellipse command, the drawing size is increased if necessary to -contain the ellipse. - - -<P> -The <CODE>\larc</CODE> command generates a counterclockwise arc specified by a -start angle in degrees and an end angle in degrees. The center of the -arc is the current position. Only the arc is drawn, not the line -joining the center to the beginning of the arc. Note that the -<CODE>\larc</CODE> command does not affect the size of the drawing. - - -<DL COMPACT> - -<DT><CODE>\lcir r:<VAR>radius</VAR></CODE> -<DD> -<A NAME="IDX59"></A> - -Draw a circle with center at the current position. The radius is -specified by <VAR>radius</VAR>. This command draws a line along the -circumference of the circle. The drawing size is increased if necessary -to contain the circle. -<A NAME="IDX60"></A> -<DT><CODE>\fcir f:<VAR>level</VAR> r:<VAR>radius</VAR></CODE> -<DD> -Draw a filled circle with center at the current position. The radius is -specified by <VAR>radius</VAR>. The circle is painted with the gray level -specified by <VAR>level</VAR>. A gray level of 1 corresponds to white, with -decreasing values getting darker. The level 0 is full black. This -command does not draw a line along the circumference. The drawing size -is increased if necessary to contain the circle. -<A NAME="IDX61"></A> -<DT><CODE>\lellip rx:<VAR>x-radius</VAR> ry:<VAR>y-radius</VAR></CODE> -<DD> -Draw an ellipse with center at the current position. The radius in the -<VAR>x</VAR> direction is specified by <VAR>x-radius</VAR>. The radius in the -<VAR>y</VAR> direction is specified by <VAR>y-radius</VAR>. The drawing size is -increased if necessary to contain the ellipse. -<A NAME="IDX62"></A> -<DT><CODE>\fellip f:<VAR>level</VAR> rx:<VAR>x-radius</VAR> ry:<VAR>y-radius</VAR></CODE> -<DD> -Draw a filled ellipse with center at the current position. The radius -in the <VAR>x</VAR> direction is specified by <VAR>x-radius</VAR>. The radius in -the <VAR>y</VAR> direction is specified by <VAR>y-radius</VAR>. The ellipse is -painted with the gray level specified by <VAR>level</VAR>. A gray level of 1 -corresponds to white, with decreasing values getting darker. The level -0 is full black. This command does not draw a line along the boundary -of the ellipse. The drawing size is increased if necessary to contain -the ellipse. -<A NAME="IDX63"></A> -<DT><CODE>\larc r:<VAR>radius</VAR> sd:<VAR>start-angle</VAR> ed:<VAR>end-angle</VAR></CODE> -<DD> -Draw a counterclockwise arc. The center of the arc is at the current -position. The radius is specified by <VAR>radius</VAR>. The start and end -angles (in degrees) are specified by <VAR>start-angle</VAR> and -<VAR>end-angle</VAR>. This command does not affect the limits (size) of the -drawing. -</DL> - -<P> -As an example, the following commands draw a filled circle, and -superimpose an arc. - -<PRE> -\centertexdraw{ - \linewd 0.02 - \fcir f:0.7 r:1 - \larc r:1 sd:45 ed:135 - \lvec (+0.707 +0.707) \move (0 0) \lvec (-0.707 +0.707) -} -</PRE> - -<P> -Note that for the arc command, the resulting figure can spill outside of -the TeXdraw box as determined by the maximum excursions of the -coordinates. Extra moves can be used to compensate for the size of the -arc. - - - - -<H2><A NAME="SEC11" HREF="texdraw_toc.html#TOC11">2.8 Bezier curves</A></H2> -<P> -<A NAME="IDX64"></A> -<A NAME="IDX65"></A> - - -<P> -Bezier curves in TeXdraw use 4 reference coordinates, two as the end -points and two others to control the shape of the curve. Let the 4 -points be <CODE>(<VAR>x0</VAR> <VAR>y0</VAR>)</CODE>, <CODE>(<VAR>x1</VAR> <VAR>y1</VAR>)</CODE>, -<CODE>(<VAR>x2</VAR> <VAR>y2</VAR>)</CODE> and <CODE>(<VAR>x3</VAR> <VAR>y3</VAR>)</CODE>. The curve -starts out tangent to the line joining the first two points and ends up -tangent to the line joining the second two points. The control points -"pull" at the curve to control the curvature. The amount of pull -increases with the distance of the control point from the endpoint. - - -<P> -As the parameter u varies from 0 to 1, the coordinates of the Bezier -curve are given by a pair of parametric cubic equations, - - -<P> -x(u) = (1-u)^3 x0 + 3u (1-u)^2 x1 + 3u^2 (1-u) x2 + u^3 x3 -y(u) = (1-u)^3 y0 + 3u (1-u)^2 y1 + 3u^2 (1-u) y2 + u^3 y3 . - - -<DL COMPACT> - -<DT><CODE>\clvec (<VAR>x1</VAR> <VAR>y1</VAR>)(<VAR>x2</VAR> <VAR>y2</VAR>)(<VAR>x3</VAR> <VAR>y3</VAR>)</CODE> -<DD> -<A NAME="IDX66"></A> - -Draw a Bezier curve from the current position to the coordinate -<CODE>(<VAR>x3</VAR> <VAR>y3</VAR>)</CODE> which becomes the new current position. The -coordinates <CODE>(<VAR>x1</VAR> <VAR>y1</VAR>)</CODE> and <CODE>(<VAR>x2</VAR> <VAR>y2</VAR>)</CODE> -serve as control points for the curve. Only the last coordinate given -is used to update the size of the drawing. -</DL> -<P> -Note that only 3 coordinate pairs are specified. The other point is the -current position before the <CODE>\clvec</CODE> command is executed. Only the -last coordinate specified in the <CODE>\clvec</CODE> command is used to -determine the extent of the drawing. While the Bezier curve passes -through the old current position and the new current position, in -general the curve will not reach the intermediate control points. The -curve is always entirely enclosed by the convex quadrilateral defined by -the two end points and the two control points. Note that the curve may -pass outside the limits of the drawing as determined by the end point of -the curve. - - -<P> -A simple Bezier curve is produced by the following example. - -<PRE> -\btexdraw - \move (0 0) - \clvec (0 1)(1 0)(1 1) -\etexdraw -</PRE> - - - -<H2><A NAME="SEC12" HREF="texdraw_toc.html#TOC12">2.9 Fill commands</A></H2> -<P> -<A NAME="IDX67"></A> -<A NAME="IDX68"></A> -<A NAME="IDX69"></A> - - -<P> -PostScript deals with paths consisting of line segments. The paths can -be closed and the interior of the closed region filled. From -TeXdraw, paths start with a <CODE>\move</CODE> or <CODE>\rmove</CODE> command and -continue with <CODE>\lvec</CODE>, <CODE>\rlvec</CODE> or <CODE>\clvec</CODE> commands. -The TeXdraw fill commands close the path and fill the interior of the -closed region. Closing the path means that effectively another -<CODE>\lvec</CODE> line is drawn from the last point specified to the initial -point. TeXdraw provides two forms of the fill command. The -<CODE>\ifill</CODE> fills the interior of the region with the given gray -level. The lines defining the path are not drawn. The <CODE>\lfill</CODE> -command fills the region defined by the closed path and draws a line -along the enclosing path. Note for both forms of the fill command, the -gray level used for filling is opaque, even if the gray level is chosen -to be white. - - -<DL COMPACT> - -<DT><CODE>\lfill f:<VAR>level</VAR></CODE> -<DD> -<A NAME="IDX70"></A> - -Close the current path, draw the line around the path using the current -grey level for lines and paint the interior of the region with specified -gray level <VAR>level</VAR>. Gray levels are real values from 0 (black) -through intermediate values (grays) to 1 (white). -<A NAME="IDX71"></A> -<DT><CODE>\ifill f:<VAR>level</VAR></CODE> -<DD> -Close the current path and paint the interior of the region with gray -level <VAR>level</VAR>. The line around the path is not drawn. Gray levels -are real values from 0 (black) through intermediate values (grays) to 1 -(white). -</DL> - -<P> -The following example draws a "flag" with the interior filled in. The -path around the boundary is given in a clockwise order to define a -closed path. We could take advantage of the fact that the fill command -will close an open path to eliminate one of the <CODE>\lvec</CODE> commands. - -<PRE> -\centertexdraw{ -\move (0.5 0) -\lvec (0 0.5) \clvec (0.5 0.85)(1 0.65)(1.5 1) -\lvec (2 0.5) \clvec (1.5 0.15)(1 0.35)(0.5 0) -\lfill f:0.8 -} -</PRE> - -<P> -In TeXdraw, the <CODE>\move</CODE> command always terminates any previous -paths and starts a new path. Commands that change line parameters -(e.g. <CODE>\setgray</CODE> or <CODE>\lpatt</CODE>) also terminate paths and start -new paths. The circle, ellipse and arc commands do not affect the -definition of the current path. The <CODE>\avec</CODE> command is not -appropriate for defining a path to be filled. It ends a subpath at its -tail and begins a new subpath at its tip. Filling a region defined by a -path with subpaths is more complicated in that each subpath is closed -before filling. - - -<P><HR><P> -Go to the <A HREF="texdraw_1.html">first</A>, <A HREF="texdraw_1.html">previous</A>, <A HREF="texdraw_3.html">next</A>, <A HREF="texdraw_11.html">last</A> section, <A HREF="texdraw_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/Master/texmf-dist/doc/support/texdraw/texdraw_3.html b/Master/texmf-dist/doc/support/texdraw/texdraw_3.html deleted file mode 100644 index 52193c720b2..00000000000 --- a/Master/texmf-dist/doc/support/texdraw/texdraw_3.html +++ /dev/null @@ -1,369 +0,0 @@ -<HTML> -<HEAD> -<!-- Created by texi2html 1.56k from texdraw.texi on 10 March 2004 --> - -<TITLE>TeXdraw - 3. Drawing Segments and Scaling</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="texdraw_1.html">first</A>, <A HREF="texdraw_2.html">previous</A>, <A HREF="texdraw_4.html">next</A>, <A HREF="texdraw_11.html">last</A> section, <A HREF="texdraw_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC13" HREF="texdraw_toc.html#TOC13">3. Drawing Segments and Scaling</A></H1> - -<P> -TeXdraw provides individually scaled segments which can be used to -create relocatable drawing modules. - - - -<UL> -<LI><A HREF="texdraw_3.html#SEC14">Drawing segments</A> -<LI><A HREF="texdraw_3.html#SEC15">Drawing paths</A> -<LI><A HREF="texdraw_3.html#SEC16">Saving positions</A> -<LI><A HREF="texdraw_3.html#SEC17">Scaling coordinates</A> -<LI><A HREF="texdraw_3.html#SEC18">Drawing size</A> -<LI><A HREF="texdraw_3.html#SEC19">Initial current position</A> -</UL> - - - -<H2><A NAME="SEC14" HREF="texdraw_toc.html#TOC14">3.1 Drawing segments</A></H2> -<P> -<A NAME="IDX72"></A> -<A NAME="IDX73"></A> - - -<P> -A TeXdraw drawing segment allows for local modifications of -parameters and relative positioning. A TeXdraw segment is delimited -by a <CODE>\bsegment</CODE> command and an <CODE>\esegment</CODE> command. Inside -the segment, the initial current position is <CODE>(0 0)</CODE>. Any changes -to parameters such as the gray level and the line width, remain local to -the segment. Segments are implemented in TeX using a -<CODE>\begingroup</CODE> and <CODE>\endgroup</CODE>. Segments can be nested. - - -<DL COMPACT> - -<DT><CODE>\bsegment</CODE> -<DD> -<A NAME="IDX74"></A> - -Start a drawing segment. The coordinate system is shifted such that the -current position corresponds to the coordinate <CODE>(0 0)</CODE>. Changes to -scaling, position and line parameters stay local to the drawing segment. -<A NAME="IDX75"></A> -<DT><CODE>\esegment</CODE> -<DD> -End a drawing segment. The current position in effect before the -corresponding <CODE>\bsegment</CODE> command is restored. The scaling and -line parameter values revert to those in effect before the corresponding -<CODE>\bsegment</CODE> command was invoked. -</DL> - - - -<H2><A NAME="SEC15" HREF="texdraw_toc.html#TOC15">3.2 Drawing paths</A></H2> -<P> -<A NAME="IDX76"></A> -<A NAME="IDX77"></A> -<A NAME="IDX78"></A> -Certain subtle interactions occur between drawing segments and fill -operations. In PostScript, lines are drawn by first defining a path, -then later stroking the path to draw the line. In TeXdraw, this -stroking occurs when the line is terminated, say by a <CODE>\move</CODE> -command. PostScript paths are interrupted by, but continue after a -drawing segment. This means that a path started before a segment may -not be stroked (drawn) until after the segment ends. Consider the -following example. - -<PRE> -\move (0 0) -\lvec (1 1) -\bsegment - \move (-0.25 -0.25) - \fcir f:0.8 r:0.5 -\esegment -\move (0 0) -</PRE> - -<P> -A PostScript path is started at <CODE>(0 0)</CODE> and continues with a line -to <CODE>(1 1)</CODE>. This path is interrupted by the segment. The filled -circle is drawn next. After the segment, the path continues and is not -stroked until the <CODE>\move (0 0)</CODE> command after the end of the -segment. This means that the line appears on top of the filled region. - - -<P> -If the fill operation is to cover the line, the path must be stroked -before the fill operation. From TeXdraw, the move commands -<CODE>\move</CODE> and <CODE>\rmove</CODE>, and the end TeXdraw command -<CODE>\etexdraw</CODE> terminate a path and cause it to be stroked. Within a -segment, the end segment command <CODE>\esegment</CODE> also terminates and -strokes a path. In the example above, the line can be stroked by -inserting a move command (such as a <CODE>\rmove (0 0)</CODE> which does not -affect the position), before the start of the segment. - - - - -<H2><A NAME="SEC16" HREF="texdraw_toc.html#TOC16">3.3 Saving positions</A></H2> -<P> -<A NAME="IDX79"></A> -<A NAME="IDX80"></A> -<A NAME="IDX81"></A> -<A NAME="IDX82"></A> - - -<P> -The <CODE>\savecurrpos</CODE> command saves the current position. The saved -position is an absolute position, not one relative to a segment. The -position saving mechanism is global; the position can be saved within a -nested segment and then used outside of the segment. The <VAR>x</VAR> and -<VAR>y</VAR> coordinates of the position are saved separately as named -coordinates. The names are of the form <CODE>*<VAR>name</VAR></CODE>, with the -leading <CODE>*</CODE> being obligatory. A companion command, -<CODE>\savepos</CODE>, saves a given coordinate (relative to the current -segment) as an absolute symbolic position. - - -<DL COMPACT> - -<DT><CODE>\savecurrpos (*<VAR>px</VAR> *<VAR>py</VAR>)</CODE> -<DD> -<A NAME="IDX83"></A> - -Save the current position as the absolute position referenced by -<CODE>(*<VAR>px</VAR> *<VAR>py</VAR>)</CODE>. -<A NAME="IDX84"></A> -<DT><CODE>\savepos (<VAR>x</VAR> <VAR>y</VAR>)(*<VAR>px</VAR> *<VAR>py</VAR>)</CODE> -<DD> -Save the coordinate position <CODE>(<VAR>x</VAR> <VAR>y</VAR>)</CODE> as the absolute -position referenced by <CODE>(*<VAR>px</VAR> *<VAR>py</VAR>)</CODE>. The coordinate -<CODE>(<VAR>x</VAR> <VAR>y</VAR>)</CODE> is interpreted in the normal fashion as a -coordinate relative to the current segment, using the current scaling -factors and drawing unit. -</DL> - -<P> -The symbolic names used to specify a saved position can consist of any -characters that are not special to TeX, but must start with a -<CODE>*</CODE> character. The symbolic names can be used as the <VAR>x</VAR> -and/or <VAR>y</VAR> coordinate in any command that needs a coordinate. -Symbolic coordinates are not normally used with relative motion commands -such as <CODE>\rlvec</CODE> or <CODE>\rmove</CODE>. If used with relative motion, -the corresponding displacement is equal to the symbolic coordinate -value. - - -<P> -On exit from a segment, the position and graphics state on entry is -restored. Any changes to line types, scaling and position are -discarded. However, it is sometimes useful alter the position on exit -from a segment. The <CODE>\savepos</CODE> command allows for the saving of a -position within the segment. This position can be restored after the -<CODE>\esegment</CODE> with a <CODE>\move</CODE> command using the saved symbolic -position. This approach can be used to build modules which operate in a -manner analogous to the basic relative motion line vector commands. - - -<P> -The following example defines a macro which draws a box 0.75 inches wide -by 0.5 inches high containing centered text. On leaving the macro the -position will be set at a point on the righthand side of the box. - -<PRE> -\def\tbox #1{\bsegment - \lvec (0 +0.25) \lvec (0.75 +0.25) - \lvec (0.75 -0.25) \lvec (0 -0.25) \lvec (0 0) - \textref h:C v:C \htext (0.375 0){#1} - \savepos (0.75 0)(*ex *ey) - \esegment - \move (*ex *ey)} -</PRE> - -<P> -With this definition, we can treat <CODE>\tbox</CODE> in the same way as the -basic vector commands, stringing them together to form a block diagram -as in this example. - -<PRE> -\centertexdraw{ - \ravec (1 0) \tbox{$H(z)$} \ravec (1 0) -} -</PRE> - - - -<H2><A NAME="SEC17" HREF="texdraw_toc.html#TOC17">3.4 Scaling coordinates</A></H2> -<P> -<A NAME="IDX85"></A> -<A NAME="IDX86"></A> -<A NAME="IDX87"></A> -<A NAME="IDX88"></A> - - -<P> -There are two scale factors available, the unit scale factor and the -segment scale factor. The overall scale factor is the product of these -two. There are absolute and relative versions of commands to change -these scale factors. - - -<P> -The unit scale factor is normally used to affect global scale changes. -Changes to the unit scale factor remains local to a segment, but -propagate to inferior segments. The default value is unity. - - -<P> -The segment scale factor is used for local scale changes. It remains -local to a segment. The segment scale factor is reset to unity on entry -into each segment. This means that changes to the segment scale factor -do not propagate to inferior segments. - - -<DL COMPACT> - -<DT><CODE>\setunitscale <VAR>scale</VAR></CODE> -<DD> -<A NAME="IDX89"></A> - -Set the unit scaling to <VAR>scale</VAR>. The argument <VAR>scale</VAR> is a real -number which is used to scale coordinate values. The overall scaling -factor is the product of the unit scale factor and the segment scale -factor. -<A NAME="IDX90"></A> -<DT><CODE>\relunitscale <VAR>value</VAR></CODE> -<DD> -Adjust the unit scale factor by multiplying by <VAR>value</VAR>. This has -the effect of multiplying the overall scale factor by the same factor. -The overall scaling factor is the product of the unit scale factor and -the segment scale factor. -<A NAME="IDX91"></A> -<DT><CODE>\setsegscale <VAR>scale</VAR></CODE> -<DD> -Set the segment scale factor. The argument <VAR>scale</VAR> is a real number -which is used to scale coordinate values. The overall scale factor is -the product of the unit scale factor and the segment scale factor. -<A NAME="IDX92"></A> -<DT><CODE>\relsegscale <VAR>value</VAR></CODE> -<DD> -Adjust the segment scale factor by multiplying by <VAR>value</VAR>. This has -the effect of multiplying the current overall scale factor by the same -factor. The overall scaling factor is the product of the unit scale -factor and the segment scale factor. -</DL> - -<P> -In addition to the unit scale factor and the segment scale factor, the -scaling can be controlled by the choice of drawing units with the -command <CODE>\drawdim</CODE> (see section <A HREF="texdraw_2.html#SEC7">2.4 Coordinate specification</A>). - - -<DL COMPACT> - -<DT><CODE>\drawdim cm \setunitscale 2.54</CODE> -<DD> -Set the units to centimetres scaled by 2.54. Together these commands -are effectively the same as <CODE>\drawdim in</CODE>. -</DL> - -<P> -The segment scale can be used to allow scale changes in segments so that -values are in more convenient units. For example suppose dimensions in -a segment are multiples of one third of an inch. The segment scale can -be set once to make 1 drawing unit equal 0.3333 inches. From that point -on, coordinates can be specified with integer values. - - -<P> -The following example defines a macro to draw a rectangular box which is -twice as wide as it is high. The width is specified as an argument. - -<PRE> -\def\mybox #1{\bsegment - \setsegscale #1 - \lvec (0 +0.25) \lvec (1 +0.25) \lvec (1 -0.25) - \lvec (0 -0.25) \lvec (0 0) - \esegment} -</PRE> - - - -<H2><A NAME="SEC18" HREF="texdraw_toc.html#TOC18">3.5 Drawing size</A></H2> -<P> -<A NAME="IDX93"></A> - - -<P> -The effective size of the drawing is determined by the maximum -excursions of the coordinates supplied to TeXdraw commands. The -minimum and maximum scaled <VAR>x</VAR> and <VAR>y</VAR> coordinates are tallied. -Note that <CODE>\move</CODE> commands contribute to the determination of the -calculated size of the drawing, even though they do not generate visible -lines. The circle and ellipse commands add a compensation for the radii -of circles and ellipses. The final TeXdraw drawing is placed in a -TeX box with lower lefthand corner corresponding to -<CODE>(</CODE><VAR>x</VAR>-min <VAR>y</VAR>-min<CODE>)</CODE> and upper righthand corner at -<CODE>(</CODE><VAR>x</VAR>-max <VAR>y</VAR>-max<CODE>)</CODE>. - - -<P> -Text generated by <CODE>\htext</CODE>, <CODE>\vtext</CODE> or <CODE>\rtext</CODE> can -spill outside the box as determined above. Only the text reference -point is guaranteed to be in the drawing box. Arcs can also spill -outside the drawing box. Note also that the widths of lines, and the -sizes of arrowheads do not affect the size of the drawing. The -calculated size of the drawing will never be larger than the actual size -of the drawing. In extreme cases in which text or lines extend far -outside the drawing, extra <CODE>\move</CODE> commands should be used to -establish the size of the drawing so that the TeXdraw box includes -all of the drawing. - - -<P> -TeXdraw provides the <CODE>\drawbb</CODE> command to draw a box which -indicates the effective size of the drawing. Whenever <CODE>\drawbb</CODE> is -invoked, a ruled box is drawn around the drawing as it has been sized up -to that point. Normally <CODE>\drawbb</CODE> is invoked just before the end -of a drawing to indicate the effective size of the final drawing. - - -<DL COMPACT> - -<DT><CODE>\drawbb</CODE> -<DD> -<A NAME="IDX94"></A> - -Draw a ruled box around the effective size of a drawing produced by -TeXdraw commands. -</DL> - - - -<H2><A NAME="SEC19" HREF="texdraw_toc.html#TOC19">3.6 Initial current position</A></H2> -<P> -<A NAME="IDX95"></A> -<A NAME="IDX96"></A> - - -<P> -The first operation in a drawing should be a move to establish the -current position. The current position can be established explicitly -through a <CODE>\move</CODE> command or a text positioning command such as -<CODE>\htext</CODE> with a coordinate. However, if an attempt is made to use -a drawing command which needs a current position and none has been -established, TeXdraw implicitly sets the initial current position to -<CODE>(0 0)</CODE>. The size of the TeXdraw figure is normally determined -from the sequence of coordinates specified, but will include the -implicit initial position in case another initial position has not been -explicitly specified. - - -<P><HR><P> -Go to the <A HREF="texdraw_1.html">first</A>, <A HREF="texdraw_2.html">previous</A>, <A HREF="texdraw_4.html">next</A>, <A HREF="texdraw_11.html">last</A> section, <A HREF="texdraw_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/Master/texmf-dist/doc/support/texdraw/texdraw_4.html b/Master/texmf-dist/doc/support/texdraw/texdraw_4.html deleted file mode 100644 index d766d721409..00000000000 --- a/Master/texmf-dist/doc/support/texdraw/texdraw_4.html +++ /dev/null @@ -1,119 +0,0 @@ -<HTML> -<HEAD> -<!-- Created by texi2html 1.56k from texdraw.texi on 10 March 2004 --> - -<TITLE>TeXdraw - 4. Using TeXdraw with LaTeX</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="texdraw_1.html">first</A>, <A HREF="texdraw_3.html">previous</A>, <A HREF="texdraw_5.html">next</A>, <A HREF="texdraw_11.html">last</A> section, <A HREF="texdraw_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC20" HREF="texdraw_toc.html#TOC20">4. Using TeXdraw with LaTeX</A></H1> -<P> -<A NAME="IDX97"></A> -<A NAME="IDX98"></A> -<A NAME="IDX99"></A> -<A NAME="IDX100"></A> - - -<P> -The LaTeX typesetting system uses a structured approach to declaring -typesetting environments. For LaTeX2e, the <CODE>texdraw</CODE> package -defines the <CODE>texdraw</CODE> environment. The TeXdraw environment is -started with a <CODE>\begin{texdraw}</CODE> command and terminated with an -<CODE>\end{texdraw}</CODE> command. All of the basic TeXdraw commands -can be used within the <CODE>texdraw</CODE> environment. - - -<P> -As an example, a LaTeX2e variant of an earlier example can be -constructed as follows. - -<PRE> -\documentclass{article} -\usepackage{texdraw} - ... -\begin{document} - ... -\newcommand{\tbox}[1]{% - \bsegment - \lvec (0 +0.25) \lvec (0.75 +0.25) - \lvec (0.75 -0.25) \lvec (0 -0.25) \lvec (0 0) - \textref h:C v:C \htext (0.375 0){#1} - \savepos (0.75 0)(*ex *ey) - \esegment - \move (*ex *ey)} -\begin{center} -\begin{texdraw} - \ravec (1 0) \tbox{$H(z)$} \ravec (1 0) -\end{texdraw} -\end{center} - ... -\end{document} -</PRE> - -<P> -This example illustrates the use of the LaTeX command -<CODE>\newcommand</CODE> as an alternative to the plain TeX command -<CODE>\def</CODE>. Instead of the basic TeXdraw command -<CODE>\centertexdraw</CODE>, a nested combination of the LaTeX centering -environment and the TeXdraw environment is used. - - - -<UL> -<LI><A HREF="texdraw_4.html#SEC21">PostScript printer drivers</A> -</UL> - - - -<H2><A NAME="SEC21" HREF="texdraw_toc.html#TOC21">4.1 PostScript printer drivers</A></H2> -<P> -<A NAME="IDX101"></A> -<A NAME="IDX102"></A> - - -<P> -<A NAME="IDX103"></A> -The <CODE>texdraw</CODE> package uses the printer driver interface provided by -the standard LaTeX2e <CODE>graphics</CODE> package. Any options to the -<CODE>texdraw</CODE> package are passed to the <CODE>graphics</CODE> package. -Specifically, the name of the PostScript driver to be used can be -specified as an option to the <CODE>texdraw</CODE> package. With no explicit -printer driver option, the default printer driver associated with the -<CODE>graphics</CODE> package is used. - - -<P> -<A NAME="IDX104"></A> -<A NAME="IDX105"></A> -<A NAME="IDX106"></A> -<A NAME="IDX107"></A> -<A NAME="IDX108"></A> -<A NAME="IDX109"></A> -<A NAME="IDX110"></A> -<A NAME="IDX111"></A> -<A NAME="IDX112"></A> -<A NAME="IDX113"></A> -<A NAME="IDX114"></A> -<A NAME="IDX115"></A> -<A NAME="IDX116"></A> -<A NAME="IDX117"></A> -<A NAME="IDX118"></A> -The <CODE>texdraw</CODE> package can be used with any of the printer drivers -supported by the <CODE>graphics</CODE> package that allow for the importation -of PostScript graphics files, viz., <CODE>dvips</CODE>, <CODE>xdvi</CODE>, -<CODE>dvi2ps</CODE>, <CODE>dvialw</CODE>, <CODE>dvilaser</CODE>, <CODE>dvipsone</CODE>, -<CODE>dviwindo</CODE>, <CODE>dvitops</CODE>, <CODE>oztex</CODE>, <CODE>psprint</CODE>, -<CODE>textures</CODE>, <CODE>pctexps</CODE>, and <CODE>pctexwin</CODE>. Not all of these -drivers support the text rotation needed for the TeXdraw commands -<CODE>\vtext</CODE> and <CODE>\rtext</CODE>. Of the drivers listed above, only the -following support support text rotation: <CODE>dvips</CODE>, <CODE>xdvi</CODE>, -<CODE>dvi2ps</CODE>, <CODE>dvitops</CODE>, <CODE>textures</CODE>, and <CODE>pctexps</CODE>. - - -<P><HR><P> -Go to the <A HREF="texdraw_1.html">first</A>, <A HREF="texdraw_3.html">previous</A>, <A HREF="texdraw_5.html">next</A>, <A HREF="texdraw_11.html">last</A> section, <A HREF="texdraw_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/Master/texmf-dist/doc/support/texdraw/texdraw_5.html b/Master/texmf-dist/doc/support/texdraw/texdraw_5.html deleted file mode 100644 index c880d21341d..00000000000 --- a/Master/texmf-dist/doc/support/texdraw/texdraw_5.html +++ /dev/null @@ -1,314 +0,0 @@ -<HTML> -<HEAD> -<!-- Created by texi2html 1.56k from texdraw.texi on 10 March 2004 --> - -<TITLE>TeXdraw - 5. More Details</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="texdraw_1.html">first</A>, <A HREF="texdraw_4.html">previous</A>, <A HREF="texdraw_6.html">next</A>, <A HREF="texdraw_11.html">last</A> section, <A HREF="texdraw_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC22" HREF="texdraw_toc.html#TOC22">5. More Details</A></H1> - -<P> -The first part of this chapter offers some suggestions for strategies to -isolate errors in TeX and TeXdraw input. The second part of this -chapter discusses implementational issues. An awareness of these issues -is useful if TeXdraw is to be extended. - - - -<UL> -<LI><A HREF="texdraw_5.html#SEC23">Errors while using TeXdraw</A> -<LI><A HREF="texdraw_5.html#SEC24">Extending TeXdraw</A> -<LI><A HREF="texdraw_5.html#SEC29">How TeXdraw merges graphics and text</A> -</UL> - - - -<H2><A NAME="SEC23" HREF="texdraw_toc.html#TOC23">5.1 Errors while using TeXdraw</A></H2> -<P> -<A NAME="IDX119"></A> -<A NAME="IDX120"></A> - - -<P> -TeX input is notoriously difficult to debug. If TeX reports -errors, so much the better. If the cause is not immediately obvious, -consider using a binary search strategy, removing sections of code with -the premature insertion of the <CODE>\bye</CODE> (or <CODE>\end{document}</CODE> -for LaTeX) command (with the appropriate closing of any open groups -and the like). Other strategies include the insertion of -<CODE>\message{I am here}</CODE> at appropriate places. Try using -<CODE>\tracingmacros=1</CODE>. Many problems turn out to be due to an -incorrect number of macro arguments or incorrectly delimited macro -arguments. The <CODE>\tracingmacros=1</CODE> option writes the macro -arguments and macro expansions to the TeX log file. - - -<P> -Certain errors may not manifest themselves until well after the -offending command. For instance, if a closing parenthesis is missing -from a TeXdraw coordinate, TeX continues searching for the -parenthesis. If one is found, perhaps many lines later, the TeXdraw -error message <CODE>invalid coordinate</CODE> will be printed at this later -point. - - -<P> -All input in the TeXdraw environment should be intended for -interpretation by TeXdraw commands. TeXdraw places text inside a -zero size box (the text itself extends outside the box). Extraneous -input manifests itself as a non-zero size TeXdraw text box. This -causes the TeXdraw text and the PostScript graphics to be displaced -from one another. An error message is issued if a non-zero width -TeXdraw text box is detected. If this error message appears, look -for unintended character sequences amongst the commands to TeXdraw. - - -<P> -Several TeXdraw commands pass their arguments "raw" to the -PostScript file. That means that invalid arguments can generate -PostScript errors when the document is printed. For instance the -argument of the <CODE>\setgray</CODE> command is passed straight through to -the PostScript file. If this argument is non-numeric, a PostScript -error results. Not all PostScript printers report errors back to the -user. The print may just stop prematurely. One approach to debugging -is to use a PostScript previewer on a workstation. That way, one can -determine at which point in the drawing the PostScript error occurs. - - - - -<H2><A NAME="SEC24" HREF="texdraw_toc.html#TOC24">5.2 Extending TeXdraw</A></H2> -<P> -<A NAME="IDX121"></A> - - -<P> -TeXdraw is implemented using a combination of TeX commands and -PostScript code. This section discusses some of the implementational -issues as they relate to extending TeXdraw. - - -<P> -TeXdraw as implemented, offers a basic set of drawing features. -These are adequate for certain tasks such as producing block diagrams. -There are different approaches to extending TeXdraw to include other -functions. In some cases, the desired functionality can be achieved by -writing a TeX macro which builds on top of the existing TeXdraw -commands. As these extensions become more complex, the limitations of -TeX for computations become increasingly evident. In other cases, -access to different features of PostScript is desired. The appropriate -approach would be to write new PostScript procedures which can be -accessed by TeX macros. - - -<P> -Included with TeXdraw is a set of macros for directly accessing -PostScript functions. These are described in an appendix -(see section <A HREF="texdraw_6.html#SEC30">A. PostScript Commands</A>). - - -<P> -TeXdraw also comes with a toolbox of routines for handling much of -the user interface, converting between different coordinate -representations and the like. The macros for coordinate decoding and -for computations involving coordinates are described in an appendix -(see section <A HREF="texdraw_7.html#SEC31">B. TeXdraw Toolbox</A>). - - - -<UL> -<LI><A HREF="texdraw_5.html#SEC25">Scaling</A> -<LI><A HREF="texdraw_5.html#SEC26">Resolution</A> -<LI><A HREF="texdraw_5.html#SEC27">Text placement</A> -<LI><A HREF="texdraw_5.html#SEC28">Intermediate PostScript file</A> -</UL> - - - -<H3><A NAME="SEC25" HREF="texdraw_toc.html#TOC25">5.2.1 Scaling</A></H3> -<P> -<A NAME="IDX122"></A> - - -<P> -The scaling commands provided in TeXdraw are designed to affect only -the coordinate values specified in commands. For instance, changing the -<CODE>\setunitscale</CODE> value changes the interpretation of the coordinate -in an <CODE>\avec (<VAR>x</VAR> <VAR>y</VAR>)</CODE> command, but does not change the -line width or arrowhead sizes in effect. None of the TeXdraw scaling -commands affect the size of TeX text produced by, for instance, the -<CODE>\htext</CODE> command. Scale changes will however affect the -positioning of text for subsequent commands. - - -<P> -The line parameters are changed only if the corresponding commands to -change them are issued. If the <CODE>\linewd</CODE> command is given, the -current coordinate scaling is used to determine the line width. To -achieve a behaviour more like a global scaling, whenever the scale -factor is changed, the line parameters should be set again. - - - - -<H3><A NAME="SEC26" HREF="texdraw_toc.html#TOC26">5.2.2 Resolution</A></H3> -<P> -<A NAME="IDX123"></A> - - -<P> -TeXdraw scales coordinates before passing them to PostScript. -Keeping track of the coordinate scaling is necessary, in any event, to -allow TeXdraw to compute the maximum excursions of the coordinates. -TeXdraw uses pixel units in its PostScript code. One pixel unit is -equal to 1/300 of an inch. TeXdraw issues PostScript commands with -integer valued pixel coordinates. This sets the positioning resolution -for TeXdraw. The passing of integer valued coordinates which -correspond to the device resolution keeps lines aligned with the device -grid; parallel lines of the same width will be rendered with the same -width. - - -<P> -The position saving mechanism in TeXdraw (see section <A HREF="texdraw_3.html#SEC16">3.3 Saving positions</A>) -associates the pixel coordinates of a position with the specified name. - - -<P> -TeXdraw uses the limited real number representation provided by -TeX. These operations are based on the representation of dimensions -as real-valued numbers of points. Internally in TeX, dimensions are -stored 32-bit values, normalized so that 1 pt corresponds to the scaled -point (sp) value of 65536. Dimensions with magnitudes between 0.000015 -pt and 32767 pt can be represented. This is also the dynamic range of -the TeXdraw pixel coordinates passed to PostScript. TeXdraw must -convert from user supplied coordinates using the scaling factor (which -itself consists of two components, the unit scale and the segment scale) -and a pixel conversion factor. The use of limited precision real -numbers in these computations can cause accumulation of error when -relative scaling is used repeatedly. - - - - -<H3><A NAME="SEC27" HREF="texdraw_toc.html#TOC27">5.2.3 Text placement</A></H3> - -<P> -While in the TeXdraw environment, TeX text is placed in a TeX -box while PostScript code is written to the intermediate file. At the -end of the TeXdraw environment, the size of the drawing is -determined. A TeX box of this size is created. The TeX -<CODE>\special</CODE> mechanism is used to instruct the PostScript driver -program to position the PostScript drawing from the intermediate file in -this area. Next, the text generated by TeXdraw is positioned and -placed in the box. Note that when the document is printed, the -PostScript drawing is placed on the page before the TeX text; TeX -text will appear on top of graphics. - - -<P> -<A NAME="IDX124"></A> -<A NAME="IDX125"></A> -The rotation of text is carried out with in-line PostScript code which -does not appear in the intermediate PostScript file. This code is sent -to the PostScript driver with a <CODE>\special</CODE> command. This -PostScript code is embedded in the dvi (device independent) file that -TeX produces. - - - - -<H3><A NAME="SEC28" HREF="texdraw_toc.html#TOC28">5.2.4 The intermediate PostScript file</A></H3> -<P> -<A NAME="IDX126"></A> - - -<P> -The intermediate PostScript file consists of a header, a body and a -trailer following Encapsulated PostScript File (EPSF) standards. The -header sets up PostScript definitions and default parameter values. The -trailer includes the <CODE>BoundingBox</CODE> information which gives the -coordinates in default PostScript units (72 per inch) for the lower -lefthand corner and the upper righthand corner of the drawing. The body -of the intermediate PostScript file contains the PostScript commands -generated by TeXdraw. - - -<P> -Many moves in TeXdraw serve only to position text or to reset saved -positions. TeXdraw buffers move commands in order to be able to -collapse runs of moves. Only the last move of a run of moves is -actually written to the PostScript file. However the intermediate moves -still affect the size of the drawing. The expunging of moves means that -the PostScript file <CODE>BoundingBox</CODE> information may indicate a drawing size -larger than the PostScript commands themselves would warrant. - - -<P> -Drawing segments in TeXdraw show up in the PostScript file as saves -and restores of the PostScript graphics state. Segment starts are -buffered and only written out if necessary. This way "empty" segments -do not generate output to the PostScript file. These empty segments -arise if a segment contains only moves and text commands. The moves -inside the segment are not needed since they are local to the segment, -and the text commands do not generate output to the PostScript file. - - -<P> -If TeXdraw is used only for moves and text, no intermediate -PostScript file will be created. - - - - -<H2><A NAME="SEC29" HREF="texdraw_toc.html#TOC29">5.3 How TeXdraw merges graphics and text</A></H2> -<P> -<A NAME="IDX127"></A> -<A NAME="IDX128"></A> -<A NAME="IDX129"></A> - - -<P> -TeXdraw creates a box which is the same size as the graphic. The -printer driver will place the PostScript graphic into this space. Any -TeX text generated by the TeXdraw commands will be superimposed on -this graphic. - - -<P> -<A NAME="IDX130"></A> -<A NAME="IDX131"></A> -The LaTeX2e front-end for TeXdraw is enabled by including the -<CODE>texdraw</CODE> package. The <CODE>texdraw</CODE> package automatically -invokes the standard <CODE>graphics</CODE> package distributed with -LaTeX2e. The <CODE>graphics</CODE> package has support for a number of -different printer drivers, including a number for PostScript printers. -Any options to the <CODE>texdraw</CODE> package are passed on to the -<CODE>graphics</CODE> package. Such an option can be used to select a driver -other than the default one. - - -<P> -<A NAME="IDX132"></A> -<A NAME="IDX133"></A> -<A NAME="IDX134"></A> -<A NAME="IDX135"></A> -<A NAME="IDX136"></A> -Within the <CODE>graphics</CODE> package, the driver option is used to select -definitions for the low-level macros which generate the <CODE>\special</CODE> -commands needed to request insertion of a graphics file and to rotate -text.<A NAME="DOCF2" HREF="texdraw_foot.html#FOOT2">(2)</A> -TeXdraw uses the user-level macros defined by the <CODE>graphics</CODE> -package (see section <A HREF="texdraw_4.html#SEC21">4.1 PostScript printer drivers</A>). When not used with the -LaTeX2e front-end, TeXdraw defines versions of these macros that -are suitable for use with the <CODE>dvips</CODE> printer driver. - - -<P><HR><P> -Go to the <A HREF="texdraw_1.html">first</A>, <A HREF="texdraw_4.html">previous</A>, <A HREF="texdraw_6.html">next</A>, <A HREF="texdraw_11.html">last</A> section, <A HREF="texdraw_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/Master/texmf-dist/doc/support/texdraw/texdraw_6.html b/Master/texmf-dist/doc/support/texdraw/texdraw_6.html deleted file mode 100644 index 9686e350ae8..00000000000 --- a/Master/texmf-dist/doc/support/texdraw/texdraw_6.html +++ /dev/null @@ -1,183 +0,0 @@ -<HTML> -<HEAD> -<!-- Created by texi2html 1.56k from texdraw.texi on 10 March 2004 --> - -<TITLE>TeXdraw - A. PostScript Commands</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="texdraw_1.html">first</A>, <A HREF="texdraw_5.html">previous</A>, <A HREF="texdraw_7.html">next</A>, <A HREF="texdraw_11.html">last</A> section, <A HREF="texdraw_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC30" HREF="texdraw_toc.html#TOC30">A. PostScript Commands</A></H1> -<P> -<A NAME="IDX137"></A> - - -<P> -This appendix describes a set of macros for accessing some of the -PostScript builtin functions. Each of these macros issues a single -PostScript command. The extra services provided by TeXdraw are the -interpretation of coordinates in user units relative to the current -drawing segment and the writing of a pending TeXdraw move to the -PostScript file. This last operation establishes the current point in -PostScript. The user of these commands should be familiar with the -concepts of path construction and filling in PostScript. Further -details on the PostScript functions used can found in the -<CITE>PostScript Language Reference Manual, Second Edition</CITE>, Adobe -Systems, Addison-Wesley, 1990. - - -<P> -These macros are distributed in file <TT>`txdps.tex'</TT>. - - -<P> -The <CODE>\PSsetlinecap</CODE> and <CODE>\PSsetlinejoin</CODE> commands control the -way line ends and line joins are rendered. The default values set by -TeXdraw (round caps and round join) are appropriate for most -drawings. Changes to these parameters apply to the current and -subsequent paths. - - -<P> -<A NAME="IDX138"></A> -<A NAME="IDX139"></A> -<DL COMPACT> - -<DT><CODE>\PSsetlinecap <VAR>type</VAR></CODE> -<DD> -<A NAME="IDX140"></A> - <A NAME="IDX141"></A> - -Set the line cap parameter. The value <CODE>0</CODE> gives a butt cap; -<CODE>1</CODE> gives a round cap; and <CODE>2</CODE> gives a projecting square cap. -The initial value is corresponds to a round cap. -<A NAME="IDX142"></A> -<A NAME="IDX143"></A> -<DT><CODE>\PSsetlinejoin <VAR>type</VAR></CODE> -<DD> -Set the line join parameter. The value <CODE>0</CODE> gives a miter join; -<CODE>1</CODE> gives a round join; and <CODE>2</CODE> gives a bevel join. The -initial value corresponds to a round join. -</DL> - -<P> -<A NAME="IDX144"></A> -<A NAME="IDX145"></A> -<A NAME="IDX146"></A> -<A NAME="IDX147"></A> -PostScript paths and fill operations can be controlled by a number of -functions. By design, TeXdraw always maintains a defined PostScript -current point. Some of the following macros cause the PostScript -current point to become undefined. The PostScript current point must be -set again (say with a <CODE>\PSmoveto</CODE> command) before invoking basic -TeXdraw commands. -<DL COMPACT> - -<DT><CODE>\PSstroke</CODE> -<DD> -<A NAME="IDX148"></A> - <A NAME="IDX149"></A> - -Stroke a PostScript path. The current path is stroked with the current -gray level (set with <CODE>\setgray</CODE>) and the current line pattern (set -with <CODE>\lpatt</CODE>). The PostScript current point becomes undefined. -<A NAME="IDX150"></A> -<A NAME="IDX151"></A> -<DT><CODE>\PSnewpath</CODE> -<DD> -Establish a new path. The PostScript current point becomes undefined. -<A NAME="IDX152"></A> -<A NAME="IDX153"></A> -<DT><CODE>\PSclosepath</CODE> -<DD> -Close a subpath. A new subpath is started. -<A NAME="IDX154"></A> -<A NAME="IDX155"></A> -<DT><CODE>\PSfill</CODE> -<DD> -Fill a region defined by a path. Each subpath is closed and the -enclosed regions painted with the current gray level. The PostScript -current point becomes undefined. The gray level can be set with the -TeXdraw command <CODE>\setgray</CODE>. -</DL> - -<P> -The following line commands interpret coordinates relative to the -current TeXdraw scaling and drawing segment. The specified -coordinate affects the drawing size as determined by TeXdraw. -<A NAME="IDX156"></A> -<A NAME="IDX157"></A> -<DL COMPACT> - -<DT><CODE>\PSlineto (<VAR>x</VAR> <VAR>y</VAR>)</CODE> -<DD> -<A NAME="IDX158"></A> - <A NAME="IDX159"></A> - -Add a line segment to the current path. This command is identical to -the TeXdraw command <CODE>\lvec</CODE>. The PostScript current point must -be defined before this command is issued. -<A NAME="IDX160"></A> -<A NAME="IDX161"></A> -<DT><CODE>\PSmoveto (<VAR>x</VAR> <VAR>y</VAR>)</CODE> -<DD> -Move to the coordinate specified by <CODE>(<VAR>x</VAR> <VAR>y</VAR>)</CODE>. The -PostScript current point becomes defined. -</DL> - -<P> -The following macros provide access to the general arc commands in -PostScript. The coordinates are interpreted relative to the current -TeXdraw scaling and drawing segment. The specified coordinate -affects the drawing size as determined by TeXdraw. -<A NAME="IDX162"></A> -<DL COMPACT> - -<DT><CODE>\PSarc r:<VAR>radius</VAR> sd:<VAR>start-angle</VAR> ed:<VAR>end-angle</VAR> (<VAR>x</VAR> <VAR>y</VAR>)</CODE> -<DD> -<A NAME="IDX163"></A> - <A NAME="IDX164"></A> - -Draw a counterclockwise arc. The center of the arc is at the given -position. The radius is specified by <VAR>radius</VAR>. The start and end -angles (in degrees) are specified by <VAR>start-angle</VAR> and -<VAR>end-angle</VAR>. If the PostScript current point is defined, this -command also draws the line from the current point to the beginning of -the arc. The line and arc become part of the current path. The current -point becomes defined. -<A NAME="IDX165"></A> -<A NAME="IDX166"></A> -<DT><CODE>\PSarcn r:<VAR>radius</VAR> sd:<VAR>start-angle</VAR> ed:<VAR>end-angle</VAR> (<VAR>x</VAR> <VAR>y</VAR>)</CODE> -<DD> -Draw a clockwise arc. The center of the arc is at the given position. -The radius is specified by <VAR>radius</VAR>. The start and end angles (in -degrees) are specified by <VAR>start-angle</VAR> and <VAR>end-angle</VAR>. If the -PostScript current point is defined, this command also draws the line -from the current point to the beginning of the arc. The line and arc -become part of the current path. The current point becomes defined. -</DL> - -<P> -The macro <CODE>\writeps</CODE> provides the general facility to write -arbitrary PostScript commands to the PostScript file. This macro is -used by the preceding commands and by the TeXdraw commands -themselves. This facility has to be used with care since changes in -position or scaling resulting from the PostScript commands are not known -to TeXdraw. -<DL COMPACT> - -<DT><CODE>\writeps {<VAR><ps-commands></VAR>}</CODE> -<DD> -<A NAME="IDX167"></A> - -Write PostScript commands to the intermediate PostScript file. Before -the commands are inserted, any pending TeXdraw move is written to the -PostScript file. The PostScript scaling gives 300 units/inch. -</DL> - -<P><HR><P> -Go to the <A HREF="texdraw_1.html">first</A>, <A HREF="texdraw_5.html">previous</A>, <A HREF="texdraw_7.html">next</A>, <A HREF="texdraw_11.html">last</A> section, <A HREF="texdraw_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/Master/texmf-dist/doc/support/texdraw/texdraw_7.html b/Master/texmf-dist/doc/support/texdraw/texdraw_7.html deleted file mode 100644 index 1905d68c0fe..00000000000 --- a/Master/texmf-dist/doc/support/texdraw/texdraw_7.html +++ /dev/null @@ -1,250 +0,0 @@ -<HTML> -<HEAD> -<!-- Created by texi2html 1.56k from texdraw.texi on 10 March 2004 --> - -<TITLE>TeXdraw - B. TeXdraw Toolbox</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="texdraw_1.html">first</A>, <A HREF="texdraw_6.html">previous</A>, <A HREF="texdraw_8.html">next</A>, <A HREF="texdraw_11.html">last</A> section, <A HREF="texdraw_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC31" HREF="texdraw_toc.html#TOC31">B. TeXdraw Toolbox</A></H1> - -<P> -This appendix describes some of the macros supplied with TeXdraw -which can be used to define additional commands for creating drawings. -The macros described here work in the user specified coordinate system. -Some of these toolbox macros are used by the TeXdraw commands -themselves, others are supplied in an auxiliary file -<TT>`txdtools.tex'</TT>. - - - -<UL> -<LI><A HREF="texdraw_7.html#SEC32">Coordinate parsing</A> -<LI><A HREF="texdraw_7.html#SEC33">Real arithmetic</A> -<LI><A HREF="texdraw_7.html#SEC34">Arrow curve</A> -</UL> - - - -<H2><A NAME="SEC32" HREF="texdraw_toc.html#TOC32">B.1 Coordinate parsing</A></H2> - -<P> -The coordinate parsing macro <CODE>\getpos</CODE> is useful for creating new -commands. This macro takes care of stripping leading and trailing -blanks from coordinates specified between parentheses. In addition, -symbolic coordinates are translated to the corresponding relative -coordinate using the segment offset and scaling in effect. - - -<P> -The macro <CODE>\currentpos</CODE> returns the relative coordinates of the -current position. The returned values are relative to the current -segment and the current scaling. The macro <CODE>\cossin</CODE> returns the -real-valued cosine and sine of the direction of the line joining two -points. The macro <CODE>\vectlen</CODE> returns the length of a vector. The -results appear as the value of user supplied macro names. - - -<P> -<A NAME="IDX168"></A> -<A NAME="IDX169"></A> -<A NAME="IDX170"></A> -<A NAME="IDX171"></A> -<A NAME="IDX172"></A> -<A NAME="IDX173"></A> -<A NAME="IDX174"></A> -<DL COMPACT> - -<DT><CODE>\getpos (<VAR>x</VAR> <VAR>y</VAR>)\<VAR>mx</VAR>\<VAR>my</VAR></CODE> -<DD> -<A NAME="IDX175"></A> - -Decode coordinate values. The coordinates specified by <CODE>(<VAR>x</VAR> -<VAR>y</VAR>)</CODE> are decoded. Symbolic coordinates are translated to the -corresponding relative coordinate using the current segment offset and -scaling. The resulting character strings representing the real-valued -coordinates are assigned to the macros specified by <CODE>\<VAR>mx</VAR></CODE> and -<CODE>\<VAR>my</VAR></CODE>. -<A NAME="IDX176"></A> -<DT><CODE>\currentpos \<VAR>mx</VAR>\<VAR>my</VAR></CODE> -<DD> -Return the coordinates of the current position. The coordinates are -relative to the current segment offset and scaling. The resulting -character strings representing the real-valued coordinates are assigned -to the macros specified by <CODE>\<VAR>mx</VAR></CODE> and <CODE>\<VAR>my</VAR></CODE>. -<A NAME="IDX177"></A> -<DT><CODE>\cossin (<VAR>x1</VAR> <VAR>y1</VAR>)(<VAR>x2</VAR> <VAR>y2</VAR>)\<VAR>cosa</VAR>\<VAR>sina</VAR></CODE> -<DD> -Return the cosine and sine of the direction of a vector joining two -points. The cosine and sine of the angle of the vector which goes from -<CODE>(<VAR>x1</VAR> <VAR>y1</VAR>)</CODE> to <CODE>(<VAR>x2</VAR> <VAR>y2</VAR>)</CODE>. The character -strings representing these real-valued quantities are assigned to the -macros specified by <CODE>\<VAR>cosa</VAR></CODE> and <CODE>\<VAR>sina</VAR></CODE>. -<A NAME="IDX178"></A> -<DT><CODE>\vectlen (<VAR>x1</VAR> <VAR>y1</VAR>)(<VAR>x2</VAR> <VAR>y2</VAR>)\<VAR>len</VAR></CODE> -<DD> -Return the length of a vector joining two points. The length of the -vector is relative to the current scaling. The character string -representing the real-valued length is assigned to the macro specified -by <CODE>\<VAR>len</VAR></CODE>. -</DL> - - - -<H2><A NAME="SEC33" HREF="texdraw_toc.html#TOC33">B.2 Real arithmetic</A></H2> - -<P> -The TeXdraw toolbox supplies macros to perform real arithmetic on -coordinate values. The result appears as the value of a user supplied -macro name. -<DL COMPACT> - -<DT><CODE>\realadd {<VAR>value1</VAR>} {<VAR>value2</VAR>} \<VAR>sum</VAR></CODE> -<DD> -<A NAME="IDX179"></A> - -Add two real quantities, assigning the resultant character string -representing the sum to the macro <CODE>\<VAR>sum</VAR></CODE>. -<A NAME="IDX180"></A> -<DT><CODE>\realmult {<VAR>value1</VAR>} {<VAR>value2</VAR>} \<VAR>prod</VAR></CODE> -<DD> -Multiply two real quantities, assigning the resultant character string -representing the product to the macro <CODE>\<VAR>prod</VAR></CODE>. -<A NAME="IDX181"></A> -<DT><CODE>\realdiv {<VAR>value1</VAR>} {<VAR>value2</VAR>} \<VAR>result</VAR></CODE> -<DD> -Divide two real quantities, assigning the resultant character string -representing the result of <VAR>value1</VAR>/<VAR>value2</VAR> to the macro -<CODE>\<VAR>result</VAR></CODE>. -</DL> - - - -<H2><A NAME="SEC34" HREF="texdraw_toc.html#TOC34">B.3 Arrow curve</A></H2> -<P> -<A NAME="IDX182"></A> - - -<P> -This example illustrates the use of the TeXdraw toolbox routines to -do computations with the coordinates. The problem will be tackled in -two parts. First, we will produce a macro to place an arrowhead on a -Bezier curve. Then given this macro, we will produce a macro which can -draw a "wiggly" line from the current position to a given coordinate. - - -<P> -The first macro, <CODE>\cavec</CODE>, uses the <CODE>\cossin</CODE> command to -determine the the cosine and sine of the angle of the line joining the -second control point to the end point of the Bezier curve. Recall that -the Bezier curve is tangent to this line at the end point. After -drawing the Bezier curve, the scaling is set locally to absolute units -of 0.05 inches. We go back down the line from the end point by 0.05 -inches and draw an arrow vector to the end point from there. This arrow -vector is mostly arrowhead, with little or no tail. - - - -<PRE> -\def\cavec (#1 #2)(#3 #4)(#5 #6){ - \clvec (#1 #2)(#3 #4)(#5 #6) - \cossin (#3 #4)(#5 #6)\cosa\sina - \rmove (0 0) - \bsegment - \drawdim in \setsegscale 0.05 - \move ({-\cosa} -\sina) \avec (0 0) - \esegment} -</PRE> - -<P> -Note the use of macros as arguments to a <CODE>\move</CODE> command. Minus -signs are put in front of the macros. However, the value of the macro -<CODE>\cosa</CODE> or <CODE>\sina</CODE> could be negative. Fortunately, TeX -accepts two minus signs in a row and interprets the result as positive. -Note that the <CODE>\rmove (0 0)</CODE> command before the beginning of the -segment ensures that the Bezier curve is stroked before the arrowhead is -drawn. - - -<P> -The second macro <CODE>\caw</CODE> builds on <CODE>\cavec</CODE>. The goal is to -produce a wiggly vector that can be used as a pointer in a drawing. -Consider the following symmetrical normalized Bezier curve. - -<PRE> -\centertexdraw{ \move (0 0) \cavec (1.4 0.1)(-0.4 -0.1)(1 0) } -</PRE> - -<P> -This curve has the appropriate wiggle. Now we want to be able to draw -this curve, appropriately scaled and rotated. The macro <CODE>\caw</CODE> -needs to do computations on the coordinates. First, <CODE>\caw</CODE> uses -the macros <CODE>\getpos</CODE> and <CODE>\currentpos</CODE> to get the positions of -the end and start of the curve. Next, the length of the vector is -calculated using the macro <CODE>\vectlen</CODE>. A local macro -<CODE>\rotatecoord</CODE> is used to rotate a coordinate pair about the -origin, using the cosine and sine of the rotation angle. The vector -length is used to scale the normalized curve. The remaining code draws -the rotated, normalized curve. - - - -<PRE> -\def\caw (#1 #2){ - \currentpos \xa\ya - \cossin ({\xa} \ya)(#1 #2)\cosa\sina - -% The nominal wiggly curve is (0 0) (1+dx dy) (-dx -dy) (1 0) -% Find the rotated offset (dx dy) -> (du dv) - \rotatecoord (0.4 0.1)\cosa\sina \du\dv - -% calculate the length of the vector - \vectlen ({\xa} \ya)(#1 #2)\len - -% draw the curve in normalized units - \bsegment - \setsegscale {\len} - \realadd \cosa \du \tmpa \realadd \sina \dv \tmpb - \cavec ({\tmpa} \tmpb)({-\du} -\dv)({\cosa} \sina) - \esegment - \move (#1 #2)} - -% rotate a coordinate (x y) -% arguments: (x y) cosa sina x' y' -% x' = cosa * x - sina * y; y' = sina * x + cosa * y -\def\rotatecoord (#1 #2)#3#4#5#6{ - \getpos (#1 #2)\xarg\yarg - \realmult \xarg {#3} \tmpa \realmult \yarg {#4} \tmpb - \realadd \tmpa {-\tmpb} #5 - \realmult \xarg {#4} \tmpa \realmult \yarg {#3} \tmpb - \realadd \tmpa \tmpb #6} -</PRE> - -<P> -Finally, the new macro can be used as follows. - -<PRE> -\centertexdraw{ - \arrowheadtype t:W - \move (0 0) - \cavec (1.4 0.1)(-0.4 -0.1)(1 0) - \move (1 0) \caw (1 1) \htext{tip at \tt (1 1)} - \move (1 0) \caw (2 1) \htext{tip at \tt (2 1)} - \move (1 0) \caw (2 0) \htext{tip at \tt (2 0)} - -} -</PRE> - -<P> -Note that the Bezier curve in the macro <CODE>\cavec</CODE> lies below the -arrowhead. The example then draws an arrowhead of type <CODE>W</CODE> to -erase the part of the line below the arrowhead. - - -<P><HR><P> -Go to the <A HREF="texdraw_1.html">first</A>, <A HREF="texdraw_6.html">previous</A>, <A HREF="texdraw_8.html">next</A>, <A HREF="texdraw_11.html">last</A> section, <A HREF="texdraw_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/Master/texmf-dist/doc/support/texdraw/texdraw_8.html b/Master/texmf-dist/doc/support/texdraw/texdraw_8.html deleted file mode 100644 index 09ee5d14520..00000000000 --- a/Master/texmf-dist/doc/support/texdraw/texdraw_8.html +++ /dev/null @@ -1,342 +0,0 @@ -<HTML> -<HEAD> -<!-- Created by texi2html 1.56k from texdraw.texi on 10 March 2004 --> - -<TITLE>TeXdraw - C. Examples</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="texdraw_1.html">first</A>, <A HREF="texdraw_7.html">previous</A>, <A HREF="texdraw_9.html">next</A>, <A HREF="texdraw_11.html">last</A> section, <A HREF="texdraw_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC35" HREF="texdraw_toc.html#TOC35">C. Examples</A></H1> -<P> -<A NAME="IDX183"></A> - - -<P> -This appendix shows examples of the use of TeXdraw. - - - -<UL> -<LI><A HREF="texdraw_8.html#SEC36">Block diagram</A> -<LI><A HREF="texdraw_8.html#SEC37">Filter response graph</A> -<LI><A HREF="texdraw_8.html#SEC38">Geometric construction</A> -</UL> - - - -<H2><A NAME="SEC36" HREF="texdraw_toc.html#TOC36">C.1 Block diagram of a lattice filter</A></H2> - -<P> -The block diagram of a lattice filter uses a library of extended -commands built from the basic TeXdraw commands. - - -<P> -The block diagram uses a "delay" block. This is defined as a segment -which leaves the current position at the end of this block. A second -macro, <CODE>\bdot</CODE>, draws a "big" dot which is used to mark junctions -of lines. The <CODE>\Ttext</CODE> command centers text above a given point. -The offset to position the text is local to a segment, resulting in no -change to the current point. Similar macros to position text below a -point (<CODE>\Btext</CODE>), to the left of a point (<CODE>\Ltext</CODE>) and to the -right of a point (<CODE>\Rtext</CODE>) are used in the final drawing. - -<PRE> -\def\delay {\bsegment - \setsegscale 0.3 - \lvec (0 +0.5) \lvec (1 +0.5) \lvec (1 -0.5) - \lvec (0 -0.5) \lvec (0 0) - \textref h:C v:C \htext (0.5 0){$z^{-1}$} - \savepos (1 0)(*ex *ey) - \esegment - \move (*ex *ey)} -\def\bdot {\fcir f:0 r:0.02 } -\def\Ttext #1{\bsegment - \textref h:C v:B \htext (0 +0.06){#1} - \esegment} -</PRE> - -<P> -Several of the block diagram elements scale with the size of the summing -nodes. The radius of the circles for the summing nodes is defined as -the macro <CODE>\cradius</CODE>. The summing nodes will have enclosed plus -signs, appropriately scaled. The plus sign is drawn by the macro -<CODE>\pluss</CODE>. The macro <CODE>\pcir</CODE> draws both the circle and the -plus sign. The incoming lines to a summing node will be labelled with -plus or minus signs (characters this time), placed at the appropriate -position with respect to the center of the summing node. These -positions are given in terms of compass directions. The macro -<CODE>\putwnw</CODE> places text west by north-west relative to the center of -the summing node. - -<PRE> -\def\cradius {0.08} -\def\pluss {\bsegment - \setsegscale {\cradius} - \move (-0.5 0) \lvec (+0.5 0) - \move (0 -0.5) \lvec (0 +0.5) - \esegment} -\def\pcir {\lcir r:{\cradius} \pluss} -\def\puttext (#1 #2)#3{\bsegment - \setsegscale {\cradius} - \textref h:C v:C \htext (#1 #2){#3} - \esegment} -\def\putwnw #1{\puttext (-1.7 +1.2){#1}} -</PRE> - -<P> -The block diagram has vectors arriving and departing from the summing -nodes (circles). One could calculate the points of intersection of the -lines with the circles, and then enter the values into the TeXdraw -code. However, in this example, we implement an automated procedure. -Two macros are needed, an arrow vector to a circle (<CODE>\avectoc</CODE>) and -an arrow vector leaving from a circle (<CODE>\avecfrc</CODE>). The macros -will calculate the point of intersection with the circle and start or -end the vector at the intersection point. - - -<P> -The arrow macros use scaling and relative positioning inside of a -drawing segment. In the case of the macro <CODE>\avectoc</CODE>, a move is -made to the final point (center of the circle), then within a drawing -segment, a scaled move is made back towards the initial point to -determine the intersection point with the circle. - - - -<PRE> -\def\avectoc (#1 #2){\currentpos \xa\ya - \cossin ({\xa} \ya)(#1 #2)\cosa\sina - \savepos (#1 #2)(*tx *ty) - \bsegment - \move (*tx *ty) - \setsegscale {\cradius} - \rmove ({-\cosa} -\sina) - \savecurrpos (*ex *ey) - \esegment - \avec (*ex *ey) - \move (#1 #2)} -\def\avecfrc (#1 #2){\currentpos \xa\ya - \cossin ({\xa} \ya)(#1 #2)\cosa\sina - \bsegment - \setsegscale {\cradius} - \move ({\cosa} \sina) - \savecurrpos (*ex *ey) - \esegment - \move (*ex *ey) - \avec (#1 #2)} -</PRE> - -<P> -Having defined these macros, we are ready to draw the block diagram. -The first and last sections of the lattice filter are very similar, -differing mainly in the text labels. With more effort, code could be -shared between the commands used to draw these blocks. - -<PRE> -\centertexdraw{ -\drawdim in -\arrowheadtype t:F \arrowheadsize l:0.08 w:0.04 -\def\pl {$\scriptscriptstyle +$} \def\mn {$\scriptscriptstyle -$} - -\move (0 +0.63) \move (0 -0.60) \move (0 0) % compensate for the text size - -% Input to the first stage -\bsegment - \Ltext{$x(n)$} - \lvec (0.3 0) \bdot \lvec (0.3 +0.4) \move (0.3 0) \lvec (0.3 -0.4) - \savepos (0.3 0)(*ex *ey) -\esegment -\move (*ex *ey) - -% first lattice stage -\bsegment - \move (0 +0.4) \avectoc (1.7 +0.4) - \pcir \putwnw{\pl} \puts{\mn} - \avecfrc (2.1 +0.4) - \move (0 -0.4) \avec (0.4 -0.4) \delay \avectoc (1.7 -0.4) - \pcir \putwsw{\pl} \putn{\mn} - \avecfrc (2.1 -0.4) - \move (0.9 +0.4) \bdot \avectoc (1.7 -0.4) - \move (0.9 -0.4) \bdot \avectoc (1.7 +0.4) - \move (0.1 +0.42) \Ttext {$f_0(n)$} - \move (2.0 +0.42) \Ttext {$f_1(n)$} - \move (0.1 -0.4) \Btext {$b_0(n)$} - \move (2.0 -0.4) \Btext {$b_1(n)$} - \textref h:L v:B \htext (1.15 +0.2){$K_1$} - \textref h:L v:T \htext (1.15 -0.2){$K_1$} - \savepos (2.1 0)(*ex *ey) -\esegment -\move (*ex *ey) - -% center section -\bsegment - \textref h:C v:C \htext (0.3 +0.4){$\cdots$} - \htext (0.3 -0.4){$\cdots$} - \savepos (0.6 0)(*ex *ey) -\esegment -\move (*ex *ey) - -% last lattice stage -\bsegment - \move (0 +0.4) \avectoc (1.7 +0.4) - \pcir \putwnw{\pl} \puts{\mn} - \avecfrc (2.3 +0.4) \Rtext{$e(n)$} - \move (0 -0.4) \avec (0.4 -0.4) \delay \avectoc (1.7 -0.4) - \pcir \putwsw{\pl} \putn{\mn} - \avecfrc (2.1 -0.4) - \move (0.9 +0.4) \bdot \avectoc (1.7 -0.4) - \move (0.9 -0.4) \bdot \avectoc (1.7 +0.4) - \move (0.1 +0.42) \Ttext {$f_{P-1}(n)$} - \move (2.0 +0.42) \Ttext {$f_P(n)$} - \move (0.1 -0.4) \Btext {$b_{P-1}(n)$} - \move (2.0 -0.4) \Btext {$b_P(n)$} - \textref h:L v:B \htext (1.15 +0.2){$K_P$} - \textref h:L v:T \htext (1.15 -0.2){$K_P$} -\esegment -} -</PRE> - -<P> -The macros used in this example are similar to the block diagram macros -defined in the file <TT>`blockdiagram.tex'</TT>. - - - - -<H2><A NAME="SEC37" HREF="texdraw_toc.html#TOC37">C.2 Filter response graph</A></H2> -<P> -<A NAME="IDX184"></A> - - -<P> -This example shows the response of a canonical filter. TeXdraw is -not well suited for general purpose graphing -- it has no coordinate -translation facility nor does it have separate <VAR>x</VAR> and <VAR>y</VAR> -scaling. Nonetheless, for certain simple graphs, TeXdraw is -adequate. - - -<P> -In this example, macro <CODE>\ticklab</CODE> places a labelled axis tick at a -given position. The data is specified in a straightforward manner, -having been scaled beforehand to give the desired aspect ratio for the -graph. - - - -<PRE> -\centertexdraw{ -\arrowheadtype t:F \arrowheadsize l:0.08 w:0.04 -\def\ds {\displaystyle} -\def\ticklab (#1 #2)#3{\move(#1 #2) - \bsegment - \lvec (0 0.05) - \textref h:C v:T \htext (0 -0.05){#3} - \esegment} -\def\Rtext #1{\bsegment - \textref h:L v:C \htext (+0.08 0){#1} - \esegment} - -\move (2.4 -0.3) % move to set the size - -\move (0 0) -% Axes -\avec (0 +1.4) -\move (0 0) \avec (2.2 0) \Rtext{$\omega$} -\ticklab (0 0) {0} -\ticklab (0.8 0) {$\ds {\pi \over 2N} $} -\ticklab (1.2 0) {$\omega_s$} -\ticklab (1.6 0) {$\ds {\pi \over N} $} - -\linewd 0.025 -\move (0 1) -\lvec (0.4 1) -\lvec (0.44 0.998) -\lvec (0.48 0.988) -\lvec (0.52 0.973) -\lvec (0.56 0.951) - ... -\lvec (1.08 0.233) -\lvec (1.12 0.156) -\lvec (1.16 0.078) -\lvec (1.20 0) -\lvec (1.9 0) -} -</PRE> - - - -<H2><A NAME="SEC38" HREF="texdraw_toc.html#TOC38">C.3 Geometric construction</A></H2> -<P> -<A NAME="IDX185"></A> - - -<P> -This example shows a geometric construction which places an ellipse -tangent to an enclosing circle. The size of the ellipse is determined -from geometric considerations. Macros are used to modularize the code. -The example alters the unit scale factor. This allows the drawing to be -carried out in units normalized to the radius of the circle. - - - -<PRE> -\centertexdraw{ -\arrowheadtype t:V \arrowheadsize l:0.08 w:0.04 -\linewd 0.01 -\setunitscale 1.5 % circle will have radius 1.5 inches - -\def\Btext #1{\bsegment - \textref h:C v:T \htext (0 -0.04){#1} - \esegment} -\def\Ttext #1{\bsegment - \textref h:C v:B \htext (0 +0.04){#1} - \esegment} -\def\Ltext #1{\bsegment - \textref h:R v:C \htext (-0.04 0){#1} - \esegment} -\def\bdot {\fcir f:0 r:0.0133 } -\def\vtick {\bsegment - \move (0 -0.05) \lvec (0 +0.05) - \esegment} -\def\htick {\bsegment - \move (-0.05 0) \lvec (+0.05 0) - \esegment} -\def\Hlen #1#2{\bsegment - \vtick \avec ({#1} 0) \vtick \avec (0 0) - \relsegscale 0.5 - \move ({#1} 0) \Ttext {#2} - \esegment} -\def\Vlen #1#2{\bsegment - \htick \avec (0 {#1}) \htick \avec (0 0) - \relsegscale 0.5 - \move (0 {#1}) \Ltext {#2} - \esegment} - -\lcir r:1 % circle -\move (-1.05 0) \lvec ( 1.05 0) % axes -\move (0 -1.05) \lvec (0 1.05) - -\move (0 0) \lvec (0.707 0.707) \bdot -\rmove (0.02 0.02) \textref h:L v:B \htext {X} -\move (0.707 -0.707) \bdot -\textref h:R v:T \htext(-0.02 -0.02){O} - -\move (0.5 0) % center of ellipse -\bsegment - \lellip rx:0.435 ry:0.804 - \bdot \Btext {$\beta_2$} - \move (0 0.15) \Hlen {0.435}{$|\beta_1{+}\beta_3|$} - \move (-0.7 0) \Vlen {0.804}{$|\beta_1{-}\beta_3|$} -\esegment -} -</PRE> - -<P><HR><P> -Go to the <A HREF="texdraw_1.html">first</A>, <A HREF="texdraw_7.html">previous</A>, <A HREF="texdraw_9.html">next</A>, <A HREF="texdraw_11.html">last</A> section, <A HREF="texdraw_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/Master/texmf-dist/doc/support/texdraw/texdraw_9.html b/Master/texmf-dist/doc/support/texdraw/texdraw_9.html deleted file mode 100644 index 6a96d49c59d..00000000000 --- a/Master/texmf-dist/doc/support/texdraw/texdraw_9.html +++ /dev/null @@ -1,321 +0,0 @@ -<HTML> -<HEAD> -<!-- Created by texi2html 1.56k from texdraw.texi on 10 March 2004 --> - -<TITLE>TeXdraw - D. Alphabetic listing of commands</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="texdraw_1.html">first</A>, <A HREF="texdraw_8.html">previous</A>, <A HREF="texdraw_10.html">next</A>, <A HREF="texdraw_11.html">last</A> section, <A HREF="texdraw_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC39" HREF="texdraw_toc.html#TOC39">D. Alphabetic listing of commands</A></H1> -<P> -<A NAME="IDX186"></A> - - -<DL COMPACT> - -<DT><CODE>\arrowheadsize l:<VAR>length</VAR> w:<VAR>width</VAR></CODE> -<DD> -Set the arrowhead size to be <VAR>length</VAR> units long and <VAR>width</VAR> -units wide. The width is measured across the "base" of the arrowhead. -The initial arrowhead size has a <VAR>length</VAR> of 0.16 inches and a -<VAR>width</VAR> of 0.08 inches. - -<DT><CODE>\arrowheadtype t:<VAR>type</VAR></CODE> -<DD> -Set the arrowhead type to <VAR>type</VAR>, where <VAR>type</VAR> is one of -<CODE>F</CODE>, <CODE>T</CODE>, <CODE>W</CODE>, <CODE>V</CODE>, or <CODE>H</CODE>. There are two -kinds of arrowheads. The first kind is a triangle. There are 3 -variants: type <CODE>T</CODE> is an empty triangle, type <CODE>F</CODE> is a filled -triangle (using the current gray level for lines), type <CODE>W</CODE> is a -triangle filled with white. The second kind of arrowhead is an open -ended Vee. There are 2 variants: type <CODE>V</CODE> has the stem continue to -the tip, type <CODE>H</CODE> has the stem stop at the base of the arrowhead. -The initial arrowhead type is <CODE>T</CODE>. - -<DT><CODE>\avec (<VAR>x</VAR> <VAR>y</VAR>)</CODE> -<DD> -Draw a line with an arrowhead from the current position to -<CODE>(<VAR>x</VAR> <VAR>y</VAR>)</CODE>. The new current position is <CODE>(<VAR>x</VAR> -<VAR>y</VAR>)</CODE>. The arrowhead is aligned with the line, with the tip at -<CODE>(<VAR>x</VAR> <VAR>y</VAR>)</CODE>. - -<DT><CODE>\begin{texdraw}</CODE> -<DD> -Start a TeXdraw drawing. The drawing is terminated with an -<CODE>\end{texdraw}</CODE> command. This command is for use with LaTeX. - -<DT><CODE>\bsegment</CODE> -<DD> -Start a drawing segment. The coordinate system is shifted such that the -current position corresponds to the coordinate <CODE>(0 0)</CODE>. Changes to -scaling, position and line parameters stay local to the drawing segment. - -<DT><CODE>\btexdraw</CODE> -<DD> -Start a TeXdraw drawing. The drawing is terminated with an -<CODE>\etexdraw</CODE> command. - -<DT><CODE>\centertexdraw { ... }</CODE> -<DD> -Center a TeXdraw box. The argument contains TeXdraw commands. -The resulting box has the horizontal size <CODE>\hsize</CODE> and height equal -to the height of the drawing. - -<DT><CODE>\clvec (<VAR>x1</VAR> <VAR>y1</VAR>)(<VAR>x2</VAR> <VAR>y2</VAR>)(<VAR>x3</VAR> <VAR>y3</VAR>)</CODE> -<DD> -Draw a Bezier curve from the current position to the coordinate -<CODE>(<VAR>x3</VAR> <VAR>y3</VAR>)</CODE> which becomes the new current position. The -coordinates <CODE>(<VAR>x1</VAR> <VAR>y1</VAR>)</CODE> and <CODE>(<VAR>x2</VAR> <VAR>y2</VAR>)</CODE> -serve as control points for the curve. Only the last coordinate given -is used to update the size of the drawing. - -<DT><CODE>\drawbb</CODE> -<DD> -Draw a ruled box around the effective size of a drawing produced by -TeXdraw commands. - -<DT><CODE>\drawdim <VAR>dim</VAR></CODE> -<DD> -Set the units to <VAR>dim</VAR>. The argument <VAR>dim</VAR> can be any valid -TeX dimension unit. The units are used to interpret coordinate -values. Examples of valid units: <CODE>cm</CODE>, <CODE>mm</CODE>, <CODE>in</CODE>, -<CODE>pt</CODE>, and <CODE>bp</CODE>. - -<DT><CODE>\end{texdraw}</CODE> -<DD> -End a TeXdraw drawing started with a <CODE>\begin{texdraw}</CODE> -command. The resulting TeXdraw drawing is placed in a box with -height equal to the height of the drawing and width equal to the width -of the drawing. The depth of the box is zero. This command is for use -with LaTeX. - -<DT><CODE>\esegment</CODE> -<DD> -End a drawing segment. The current position in effect before the -corresponding <CODE>\bsegment</CODE> command is restored. The scaling and -line parameter values revert to those in effect before the corresponding -<CODE>\bsegment</CODE> was invoked. - -<DT><CODE>\etexdraw</CODE> -<DD> -End a TeXdraw drawing started with a <CODE>\btexdraw</CODE> command. The -resulting TeXdraw drawing is placed in a box with height equal to the -height of the drawing and width equal to the width of the drawing. The -depth of the box is zero. - -<DT><CODE>\everytexdraw { ... }</CODE> -<DD> -Specify TeXdraw commands to be executed at the beginning of every -TeXdraw drawing. - -<DT><CODE>\fcir f:<VAR>level</VAR> r:<VAR>radius</VAR></CODE> -<DD> -Draw a filled circle with center at the current position. The radius is -specified by <VAR>radius</VAR>. The circle is painted with the gray level -specified by <VAR>level</VAR>. A gray level of 1 corresponds to white, with -decreasing values getting darker. The level 0 is full black. This -command does not draw a line along the circumference. The drawing size -is increased if necessary to contain the circle. - -<DT><CODE>\fellip f:<VAR>level</VAR> rx:<VAR>x-radius</VAR> ry:<VAR>y-radius</VAR></CODE> -<DD> -Draw a filled ellipse with center at the current position. The radius -in the <VAR>x</VAR> direction is specified by <VAR>x-radius</VAR>. The radius in -the <VAR>y</VAR> direction is specified by <VAR>y-radius</VAR>. The ellipse is -painted with the gray level specified by <VAR>level</VAR>. A gray level of 1 -corresponds to white, with decreasing values getting darker. The level -0 is full black. This command does not draw a line along the boundary -of the ellipse. The drawing size is increased if necessary to contain -the ellipse. - -<DT><CODE>\htext (<VAR>x</VAR> <VAR>y</VAR>){<VAR>text</VAR>}</CODE> -<DD> -<DT><CODE>\htext {<VAR>text</VAR>}</CODE> -<DD> -The first form of this command places the TeX text <VAR>text</VAR> -horizontally with the text reference point at the coordinate -<CODE>(<VAR>x</VAR> <VAR>y</VAR>)</CODE>. The new current position is <CODE>(<VAR>x</VAR> -<VAR>y</VAR>)</CODE>. The second form of this command places the TeX text -<VAR>text</VAR> horizontally with the text reference point at the current -position. The text reference point is set with the <CODE>\textref</CODE> -command. - -<DT><CODE>\ifill f:<VAR>level</VAR></CODE> -<DD> -Close the current path and paint the interior of the region with gray -level <VAR>level</VAR>. The line around the path is not drawn. Gray levels -are real values from 0 (black) through intermediate values (grays) to 1 -(white). - -<DT><CODE>\larc r:<VAR>radius</VAR> sd:<VAR>start-angle</VAR> ed:<VAR>end-angle</VAR></CODE> -<DD> -Draw a counterclockwise arc. The center of the arc is at the current -position. The radius is specified by <VAR>radius</VAR>. The start and end -angles (in degrees) are specified by <VAR>start-angle</VAR> and -<VAR>end-angle</VAR>. This command does not affect the limits (size) of the -drawing. - -<DT><CODE>\lcir r:<VAR>radius</VAR></CODE> -<DD> -Draw a circle with center at the current position. The radius is -specified by <VAR>radius</VAR>. This command draws a line along the -circumference of the circle. The drawing size is increased if necessary -to contain the circle. - -<DT><CODE>\lellip rx:<VAR>x-radius</VAR> ry:<VAR>y-radius</VAR></CODE> -<DD> -Draw an ellipse with center at the current position. The radius in the -<VAR>x</VAR> direction is specified by <VAR>x-radius</VAR>. The radius in the -<VAR>y</VAR> direction is specified by <VAR>y-radius</VAR>. The drawing size is -increased if necessary to contain the ellipse. - -<DT><CODE>\lfill f:<VAR>level</VAR></CODE> -<DD> -Close the current path, draw the line around the path using the current -grey level for lines and paint the interior of the region with specified -gray level <VAR>level</VAR>. Gray levels are real values from 0 (black) -through intermediate values (grays) to 1 (white). - -<DT><CODE>\linewd <VAR>width</VAR></CODE> -<DD> -Set the line width to <VAR>width</VAR> units. Initially <VAR>width</VAR> is 0.01 -inches (corresponding to 3 pixels at 300 pixels to the inch). - -<DT><CODE>\lpatt (<VAR>pattern</VAR>)</CODE> -<DD> -Set lines to have the pattern <CODE>(<VAR>pattern</VAR>)</CODE>. A pattern is a -sequence of on/off lengths separated by blanks and enclosed in parentheses. -The lengths alternately specify the length of a dash and the length of a -gap between dashes. Each length is interpreted using the current -scaling and drawing units. The pattern is used cyclically. The empty -pattern signifies a solid line. The initial line pattern is a solid -line, corresponding to the empty pattern <CODE>\lpatt ()</CODE>. - -<DT><CODE>\lvec (<VAR>x</VAR> <VAR>y</VAR>)</CODE> -<DD> -Draw a line from the current position to coordinate <CODE>(<VAR>x</VAR> -<VAR>y</VAR>)</CODE>. The new current position is <CODE>(<VAR>x</VAR> <VAR>y</VAR>)</CODE>. - -<DT><CODE>\move (<VAR>x</VAR> <VAR>y</VAR>)</CODE> -<DD> -Move to coordinate <CODE>(<VAR>x</VAR> <VAR>y</VAR>)</CODE>. The new current position -is <CODE>(<VAR>x</VAR> <VAR>y</VAR>)</CODE>. - -<DT><CODE>\ravec (<VAR>dx</VAR> <VAR>dy</VAR>)</CODE> -<DD> -Draw a line with an arrowhead from the current position, <VAR>dx</VAR> units -in the <VAR>x</VAR> direction and <VAR>y</VAR> units in the <VAR>y</VAR> direction. -The final position becomes the new current position. The arrowhead is -aligned with the line, with the tip at the new current position. - -<DT><CODE>\relsegscale <VAR>value</VAR></CODE> -<DD> -Adjust the segment scale factor by multiplying by <VAR>value</VAR>. This has -the effect of multiplying the current overall scale factor by the same -factor. The overall scaling factor is the product of the unit scale -factor and the segment scale factor. - -<DT><CODE>\relunitscale <VAR>value</VAR></CODE> -<DD> -Adjust the unit scale factor by multiplying by <VAR>value</VAR>. This has -the effect of multiplying the overall scale factor by the same factor. -The overall scaling factor is the product of the unit scale factor and -the segment scale factor. - -<DT><CODE>\rlvec (<VAR>dx</VAR> <VAR>dy</VAR>)</CODE> -<DD> -Draw a line from the current position, <VAR>dx</VAR> units in the <VAR>x</VAR> -direction and <VAR>dy</VAR> units in the <VAR>y</VAR> direction. The final -position becomes the new current position. - -<DT><CODE>\rmove (<VAR>dx</VAR> <VAR>dy</VAR>)</CODE> -<DD> -Move from the current position, <VAR>dx</VAR> units in the <VAR>x</VAR> direction -and <VAR>dy</VAR> units in the <VAR>y</VAR> direction. The final position becomes -the new current position. - -<DT><CODE>\rtext td:<VAR>angle</VAR> (x y){<VAR>text</VAR>}</CODE> -<DD> -<DT><CODE>\rtext td:<VAR>angle</VAR> {<VAR>text</VAR>}</CODE> -<DD> -The first form of this command places the TeX text <VAR>text</VAR> at an -angle with the text reference point at the coordinate <CODE>(<VAR>x</VAR> -<VAR>y</VAR>)</CODE>. The new current position is <CODE>(<VAR>x</VAR> <VAR>y</VAR>)</CODE>. The -second form of this command places the TeX text <VAR>text</VAR> at an -angle with the text reference point at the current position. In both -cases, the TeX text is placed in a box and the box is rotated -counterclockwise by <VAR>angle</VAR> degrees about the text reference point. -The text reference point is set with the <CODE>\textref</CODE> command. - -<DT><CODE>\savecurrpos (*<VAR>px</VAR> *<VAR>py</VAR>)</CODE> -<DD> -Save the current position as the absolute position referenced by -<CODE>(*<VAR>px</VAR> *<VAR>py</VAR>)</CODE>. - -<DT><CODE>\savepos (<VAR>x</VAR> <VAR>y</VAR>)(*<VAR>px</VAR> *<VAR>py</VAR>)</CODE> -<DD> -Save the coordinate position <CODE>(<VAR>x</VAR> <VAR>y</VAR>)</CODE> as the absolute -position referenced by <CODE>(*<VAR>px</VAR> *<VAR>py</VAR>)</CODE>. The coordinate -<CODE>(<VAR>x</VAR> <VAR>y</VAR>)</CODE> is interpreted in the normal fashion as a -coordinate relative to the current segment, using the current scaling -factors and drawing unit. - -<DT><CODE>\setgray <VAR>level</VAR></CODE> -<DD> -Set the gray level of lines. Gray levels are real values from 0 (black) -through intermediate values (gray) to 1 (white). The initial gray level -is 0 corresponding to black. - -<DT><CODE>\setsegscale <VAR>scale</VAR></CODE> -<DD> -Set the segment scale factor. The argument <VAR>scale</VAR> is a real number -which is used to scale coordinate values. The overall scale factor is -the product of the unit scale factor and the segment scale factor. - -<DT><CODE>\setunitscale <VAR>scale</VAR></CODE> -<DD> -Set the unit scaling to <VAR>scale</VAR>. The argument <VAR>scale</VAR> is a real -number which is used to scale coordinate values. The overall scaling -factor is the product of the unit scale factor and the segment scale -factor. - -<DT><CODE>\texdrawbox { ... }</CODE> -<DD> -Create a TeXdraw box. The argument contains TeXdraw commands. -This macro returns a TeX box with height equal to the height of the -drawing and width equal to the width of the drawing. The depth of the -box is zero. - -<DT><CODE>\textref h:<VAR>h-ref</VAR> v:<VAR>v-ref</VAR></CODE> -<DD> -Set the text reference point for subsequent text commands. The -horizontal reference point <VAR>h-ref</VAR> is one of <CODE>L</CODE>, <CODE>C</CODE> or -<CODE>R</CODE> (left, center or right). The vertical reference point -<VAR>v-ref</VAR> is one of <CODE>T</CODE>, <CODE>C</CODE> or <CODE>B</CODE> (top, center or -bottom). For rotated text, the reference point is determined before -rotation. The initial text reference point corresponds to -<CODE>\textref h:L v:B</CODE>. - -<DT><CODE>\vtext (x y){<VAR>text</VAR>}</CODE> -<DD> -<DT><CODE>\vtext {<VAR>text</VAR>}</CODE> -<DD> -The first form of this command places the TeX text <VAR>text</VAR> -vertically with the text reference point at the coordinate -<CODE>(<VAR>x</VAR> <VAR>y</VAR>)</CODE>. The new current position is <CODE>(<VAR>x</VAR> -<VAR>y</VAR>)</CODE>. The second form of this command places the TeX text -<VAR>text</VAR> vertically with the text reference point at the current -position. In both cases, the TeX text is placed in a box and the box -is rotated counterclockwise by 90 degrees about the text reference -point. The text reference point is set with the <CODE>\textref</CODE> -command. - -</DL> - -<P><HR><P> -Go to the <A HREF="texdraw_1.html">first</A>, <A HREF="texdraw_8.html">previous</A>, <A HREF="texdraw_10.html">next</A>, <A HREF="texdraw_11.html">last</A> section, <A HREF="texdraw_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/Master/texmf-dist/doc/support/texdraw/texdraw_foot.html b/Master/texmf-dist/doc/support/texdraw/texdraw_foot.html deleted file mode 100644 index b45e6c36d32..00000000000 --- a/Master/texmf-dist/doc/support/texdraw/texdraw_foot.html +++ /dev/null @@ -1,25 +0,0 @@ -<HTML> -<HEAD> -<!-- Created by texi2html 1.56k from texdraw.texi on 10 March 2004 --> - -<TITLE>TeXdraw - Footnotes</TITLE> -</HEAD> -<BODY> -<H1>TeXdraw</H1> -<H2>PostScript Drawings from TeX</H2> -<H2>Edition 2.0</H2> -<H2>December 1995</H2> -<ADDRESS>Peter Kabal</ADDRESS> -<P> -<P><HR><P> -<H3><A NAME="FOOT1" HREF="texdraw_2.html#DOCF1">(1)</A></H3> -<P>After the ninth PostScript file, the name of the -intermediate PostScript file takes the form <TT>`<VAR>name</VAR>.p10'</TT>, with -the number increasing from 10 with each file. -<H3><A NAME="FOOT2" HREF="texdraw_5.html#DOCF2">(2)</A></H3> -<P>Not all PostScript drivers support text rotation. -<P><HR><P> -This document was generated on 10 March 2004 using -<A HREF="http://wwwinfo.cern.ch/dis/texi2html/">texi2html</A> 1.56k. -</BODY> -</HTML> diff --git a/Master/texmf-dist/doc/support/texdraw/texdraw_toc.html b/Master/texmf-dist/doc/support/texdraw/texdraw_toc.html deleted file mode 100644 index fdf24359723..00000000000 --- a/Master/texmf-dist/doc/support/texdraw/texdraw_toc.html +++ /dev/null @@ -1,78 +0,0 @@ -<HTML> -<HEAD> -<!-- Created by texi2html 1.56k from texdraw.texi on 10 March 2004 --> - -<TITLE>TeXdraw - Table of Contents</TITLE> -</HEAD> -<BODY> -<H1>TeXdraw</H1> -<H2>PostScript Drawings from TeX</H2> -<H2>Edition 2.0</H2> -<H2>December 1995</H2> -<ADDRESS>Peter Kabal</ADDRESS> -<P> -<P><HR><P> -<UL> -<LI><A NAME="TOC1" HREF="texdraw_1.html#SEC1">1. Introduction</A> -<UL> -<LI><A NAME="TOC2" HREF="texdraw_1.html#SEC2">1.1 Distribution information</A> -</UL> -<LI><A NAME="TOC3" HREF="texdraw_2.html#SEC3">2. Using the TeXdraw Commands</A> -<UL> -<LI><A NAME="TOC4" HREF="texdraw_2.html#SEC4">2.1 Accessing TeXdraw</A> -<LI><A NAME="TOC5" HREF="texdraw_2.html#SEC5">2.2 Command syntax</A> -<LI><A NAME="TOC6" HREF="texdraw_2.html#SEC6">2.3 TeXdraw coordinates</A> -<LI><A NAME="TOC7" HREF="texdraw_2.html#SEC7">2.4 Coordinate specification</A> -<LI><A NAME="TOC8" HREF="texdraw_2.html#SEC8">2.5 Line vectors</A> -<LI><A NAME="TOC9" HREF="texdraw_2.html#SEC9">2.6 TeX text</A> -<LI><A NAME="TOC10" HREF="texdraw_2.html#SEC10">2.7 Circles, ellipses and arcs</A> -<LI><A NAME="TOC11" HREF="texdraw_2.html#SEC11">2.8 Bezier curves</A> -<LI><A NAME="TOC12" HREF="texdraw_2.html#SEC12">2.9 Fill commands</A> -</UL> -<LI><A NAME="TOC13" HREF="texdraw_3.html#SEC13">3. Drawing Segments and Scaling</A> -<UL> -<LI><A NAME="TOC14" HREF="texdraw_3.html#SEC14">3.1 Drawing segments</A> -<LI><A NAME="TOC15" HREF="texdraw_3.html#SEC15">3.2 Drawing paths</A> -<LI><A NAME="TOC16" HREF="texdraw_3.html#SEC16">3.3 Saving positions</A> -<LI><A NAME="TOC17" HREF="texdraw_3.html#SEC17">3.4 Scaling coordinates</A> -<LI><A NAME="TOC18" HREF="texdraw_3.html#SEC18">3.5 Drawing size</A> -<LI><A NAME="TOC19" HREF="texdraw_3.html#SEC19">3.6 Initial current position</A> -</UL> -<LI><A NAME="TOC20" HREF="texdraw_4.html#SEC20">4. Using TeXdraw with LaTeX</A> -<UL> -<LI><A NAME="TOC21" HREF="texdraw_4.html#SEC21">4.1 PostScript printer drivers</A> -</UL> -<LI><A NAME="TOC22" HREF="texdraw_5.html#SEC22">5. More Details</A> -<UL> -<LI><A NAME="TOC23" HREF="texdraw_5.html#SEC23">5.1 Errors while using TeXdraw</A> -<LI><A NAME="TOC24" HREF="texdraw_5.html#SEC24">5.2 Extending TeXdraw</A> -<UL> -<LI><A NAME="TOC25" HREF="texdraw_5.html#SEC25">5.2.1 Scaling</A> -<LI><A NAME="TOC26" HREF="texdraw_5.html#SEC26">5.2.2 Resolution</A> -<LI><A NAME="TOC27" HREF="texdraw_5.html#SEC27">5.2.3 Text placement</A> -<LI><A NAME="TOC28" HREF="texdraw_5.html#SEC28">5.2.4 The intermediate PostScript file</A> -</UL> -<LI><A NAME="TOC29" HREF="texdraw_5.html#SEC29">5.3 How TeXdraw merges graphics and text</A> -</UL> -<LI><A NAME="TOC30" HREF="texdraw_6.html#SEC30">A. PostScript Commands</A> -<LI><A NAME="TOC31" HREF="texdraw_7.html#SEC31">B. TeXdraw Toolbox</A> -<UL> -<LI><A NAME="TOC32" HREF="texdraw_7.html#SEC32">B.1 Coordinate parsing</A> -<LI><A NAME="TOC33" HREF="texdraw_7.html#SEC33">B.2 Real arithmetic</A> -<LI><A NAME="TOC34" HREF="texdraw_7.html#SEC34">B.3 Arrow curve</A> -</UL> -<LI><A NAME="TOC35" HREF="texdraw_8.html#SEC35">C. Examples</A> -<UL> -<LI><A NAME="TOC36" HREF="texdraw_8.html#SEC36">C.1 Block diagram of a lattice filter</A> -<LI><A NAME="TOC37" HREF="texdraw_8.html#SEC37">C.2 Filter response graph</A> -<LI><A NAME="TOC38" HREF="texdraw_8.html#SEC38">C.3 Geometric construction</A> -</UL> -<LI><A NAME="TOC39" HREF="texdraw_9.html#SEC39">D. Alphabetic listing of commands</A> -<LI><A NAME="TOC40" HREF="texdraw_10.html#SEC40">Command Index</A> -<LI><A NAME="TOC41" HREF="texdraw_11.html#SEC41">Concept Index</A> -</UL> -<P><HR><P> -This document was generated on 10 March 2004 using -<A HREF="http://wwwinfo.cern.ch/dis/texi2html/">texi2html</A> 1.56k. -</BODY> -</HTML> diff --git a/Master/texmf-dist/doc/support/texdraw/texi2dvi b/Master/texmf-dist/doc/support/texdraw/texi2dvi deleted file mode 100644 index 45e92ff8e7f..00000000000 --- a/Master/texmf-dist/doc/support/texdraw/texi2dvi +++ /dev/null @@ -1,275 +0,0 @@ -#! /bin/sh -# texi2dvi --- smartly produce DVI files from texinfo sources - -# Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc. - -# $Id: texi2dvi,v 1.7 1995/11/03 texdraw-V2R0 $ - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, you can either send email to this -# program's maintainer or write to: The Free Software Foundation, -# Inc.; 59 Temple Place, Suite 330; Boston, MA 02111-1307, USA. - -# Commentary: - -# Author: Noah Friedman <friedman@prep.ai.mit.edu> - -# Please send bug reports, etc. to bug-texinfo@prep.ai.mit.edu -# If possible, please send a copy of the output of the script called with -# the `--debug' option when making a bug report. - -# In the interest of general portability, some common bourne shell -# constructs were avoided because they weren't guaranteed to be available -# in some earlier implementations. I've tried to make this program as -# portable as possible. Welcome to unix, where the lowest common -# denominator is rapidly diminishing. -# -# Among the more interesting lossages I noticed with some bourne shells -# are: -# * No shell functions. -# * No `unset' builtin. -# * `shift' cannot take a numeric argument, and signals an error if -# there are no arguments to shift. - -# Code: - -# Name by which this script was invoked. -progname=`echo "$0" | sed -e 's/[^\/]*\///g'` - -# This string is expanded by rcs automatically when this file is checked out. -rcs_revision='$Revision: 1.7 $' -version=`set - $rcs_revision; echo $2` - -# To prevent hairy quoting and escaping later. -bq='`' -eq="'" - -usage="Usage: $progname {options} [file1] {file2 {...}} -(version $version) - -Options are: --D, --debug Turn on shell debugging ($bq${bq}set -x$eq$eq). --h, --help You're looking at it. --v, --version Print version number. - -Arguments in brackets are required. Those in braces are optional. -" - -# Initialize variables. -# Don't use `unset' since old bourne shells don't have this command. -# Instead, assign them an empty value. -# Some of these, like TEX and TEXINDEX, may be inherited from the environment -backup_extension=.bak -debug= -orig_pwd="`pwd`" -verbose= -texindex="${TEXINDEX-texindex}" -tex="${TEX-tex}" - -# Save this so we can construct a new TEXINPUTS path for each file to be -# processed. -TEXINPUTS_orig="$TEXINPUTS" -export TEXINPUTS - -# Parse command line arguments. -# Make sure that all wildcarded options are long enough to be unambiguous. -# It's a good idea to document the full long option name in each case. -# Long options which take arguments will need a `*' appended to the -# canonical name to match the value appended after the `=' character. -while : ; do - case $# in 0) break ;; esac - case "$1" in - -D | --debug | --d* ) - debug=t - shift - ;; - -h | --help | --h* ) - echo "$usage" 1>&2 - exit 0 - ;; - -v | --version | --v* ) - echo "texi2dvi version $version" 1>&2 - exit 0 - ;; - -- ) # Stop option processing - shift - break - ;; - -* ) - case "$1" in - --*=* ) arg=`echo "$1" | sed -e 's/=.*//'` ;; - * ) arg="$1" ;; - esac - exec 1>&2 - echo "$progname: unknown or ambiguous option $bq$arg$eq" - echo "$progname: Use $bq--help$eq for a list of options." - exit 1 - ;; - * ) - break - ;; - esac -done - -# See if there are any command line args left (which will be interpreted as -# filename arguments) -case $# in - 0 ) - exec 1>&2 - echo "$progname: at least one file name is required as an argument." - echo "$progname: Use $bq--help$eq for a description of command syntax." - exit 2 - ;; -esac - -case "$debug" in t ) set -x ;; esac - -# Texify files -for command_line_filename in ${1+"$@"} ; do - # Roughly equivalent to `dirname ...`, but more portable - directory="`echo ${command_line_filename} | sed 's/\/[^\/]*$//'`" - filename_texi="`basename ${command_line_filename}`" - # Strip off the last extension part (probably .texinfo or .texi) - filename_noext="`echo ${filename_texi} | sed 's/\.[^.]*$//'`" - - # If directory and file are the same, then it's probably because there's - # no pathname component. Set dirname to `.', the current directory. - if test "z${directory}" = "z${command_line_filename}" ; then - directory="." - fi - - # Source file might @include additional texinfo sources. Put `.' and - # directory where source file(s) reside in TEXINPUTS before anything - # else. `.' goes first to ensure that any old .aux, .cps, etc. files in - # ${directory} don't get used in preference to fresher files in `.'. - TEXINPUTS=".:${directory}:${TEXINPUTS_orig}" - - # "Unset" variables that might have values from previous iterations and - # which won't be completely reset later. - definite_index_files="" - - # See if file exists here. If it doesn't we're in trouble since, even - # though the user may be able to reenter a valid filename at the tex - # prompt (assuming they're attending the terminal), this script won't be - # able to find the right index files and so forth. - if test ! -r "${command_line_filename}" ; then - echo "${progname}: ${command_line_filename}: No such file or permission denied." 1>&2 - continue; - fi - - # Find all files having root filename with a two-letter extension, - # determine whether they're really index files, and save them. Foo.aux - # is actually the cross-references file, but we need to keep track of - # that too. - possible_index_files="`eval echo ${filename_noext}.?? ${filename_noext}.aux`" - for this_file in ${possible_index_files} ; do - # If file is empty, forget it. - if test ! -s "${this_file}" ; then - continue; - fi - - # Examine first character of file. If it's not a backslash or - # single quote, then it's definitely not an index or xref file. - first_character="`sed -n '1s/^\(.\).*$/\1/p;q' ${this_file}`" - if test "${first_character}" = "\\" -o "${first_character}" = "'" ; then - definite_index_files="${definite_index_files} ${this_file}" - fi - done - orig_index_files="${definite_index_files}" - orig_index_files_sans_aux="`echo ${definite_index_files} \ - | sed 's/'${filename_noext}'\.aux//; - s/^[ ]*//;s/[ ]*$//;'`" - - # Now save copies of original index files so we have some means of - # comparison later. - for index_file_to_save in ${orig_index_files} ; do - cp "${index_file_to_save}" "${index_file_to_save}${backup_extension}" - done - - # Run texindex on current index files. If they already exist, and - # after running TeX a first time the index files don't change, then - # there's no reason to run TeX again. But we won't know that if the - # index files are out of date or nonexistent. - if test "${orig_index_files_sans_aux}" ; then - ${texindex} ${orig_index_files_sans_aux} - fi - - if ${tex} ${command_line_filename} ; then # TeX run first time - definite_index_files="" - # Get list of new index files - possible_index_files="`eval echo ${filename_noext}.?? ${filename_noext}.aux`" - for this_file in ${possible_index_files} ; do - # If file is empty, forget it. - if test ! -s ${this_file} ; then - continue; - fi - - # Examine first character of file. If it's not a backslash or - # single quote, then it's definitely not an index or xref file. - first_character="`sed -n '1s/^\(.\).*$/\1/p;q' ${this_file}`" - if test "${first_character}" = "\\" -o "${first_character}" = "'" ; then - definite_index_files="${definite_index_files} ${this_file}" - fi - done - new_index_files="${definite_index_files}" - new_index_files_sans_aux="`echo ${definite_index_files} \ - | sed 's/'${filename_noext}'\.aux//; - s/^[ ]*//;s/[ ]*$//;'`" - - # If old and new list don't at least have the same file list, then one - # file or another has definitely changed. - if test "${orig_index_files}" != "${new_index_files}" ; then - index_files_changed_p=t - else - # File list is the same. We must compare each file until we find a - # difference. - index_files_changed_p="" - for this_file in ${new_index_files} ; do - # cmp -s will return nonzero exit status if files differ. - cmp -s "${this_file}" "${this_file}${backup_extension}" - if test $? -ne 0 ; then - # We only need to keep comparing until we find *one* that - # differs, because we'll have to run texindex & tex no - # matter what. - index_files_changed_p=t - break - fi - done - fi - - # If index files have changed since TeX has been run, or if the aux - # file wasn't present originally, run texindex and TeX again. - if test "${index_files_changed_p}" ; then - retval=0 - if test "${new_index_files_sans_aux}" ; then - ${texindex} ${new_index_files_sans_aux} - retval=$? - fi - if test ${retval} -eq 0 ; then - ${tex} "${command_line_filename}" - fi - fi - fi - - # Generate list of files to delete, then call rm once with the entire - # list. This is significantly faster than multiple executions of rm. - file_list="" - for file in ${orig_index_files} ; do - file_list="${file_list} ${file}${backup_extension}" - done - if test "${file_list}" ; then - rm -f ${file_list} - fi -done - -# texi2dvi ends here diff --git a/Master/texmf-dist/doc/support/texdraw/texindex.c b/Master/texmf-dist/doc/support/texdraw/texindex.c deleted file mode 100644 index a88d5169691..00000000000 --- a/Master/texmf-dist/doc/support/texdraw/texindex.c +++ /dev/null @@ -1,1700 +0,0 @@ -/* Prepare TeX index dribble output into an actual index. - - Version 1.45 - - Copyright (C) 1987, 1991, 1992 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ - - -#include <stdio.h> -#include <ctype.h> -#include <errno.h> -#include "getopt.h" - -#if defined (STDC_HEADERS) -# include <string.h> -# include <stdlib.h> -# if !defined (bzero) -# define bzero(p, n) memset((p), '\0', (n)) -# endif /* !bzero */ -#else /* !STDC_HEADERS */ -extern int errno; -char *getenv (), *malloc (), *realloc (); -void bzero (); -#endif /* !STDC_HEADERS */ - -#if defined (HAVE_UNISTD_H) -# include <unistd.h> -#else /* !HAVE_UNISTD_H */ -long lseek (); -#endif /* !HAVE_UNISTD_H */ - -char *mktemp (); - -#if defined (VMS) -# if !defined (VAX11C) -# define noshare -# endif /* !VAX11C */ -# include <perror.h> -extern noshare int sys_nerr; -extern noshare char *sys_errlist[]; - -# include <file.h> - -# define TI_NO_ERROR ((1 << 28) | 1) -# define TI_FATAL_ERROR ((1 << 28) | 4) -# define unlink delete - -#else /* !VMS */ - -extern int sys_nerr; -extern char *sys_errlist[]; - -# if defined (HAVE_SYS_FCNTL_H) -# include <sys/types.h> -# include <sys/fcntl.h> -# endif /* HAVE_SYS_FCNTL_H */ - -# if defined (_AIX) || !defined (_POSIX_VERSION) -# include <sys/file.h> -# else /* !AIX && _POSIX_VERSION */ -# if !defined (HAVE_SYS_FCNTL_H) -# include <fcntl.h> -# endif /* !HAVE_FCNTL_H */ -# endif /* !_AIX && _POSIX_VERSION */ -# define TI_NO_ERROR 0 -# define TI_FATAL_ERROR 1 -#endif /* !VMS */ - -#if !defined (SEEK_SET) -# define SEEK_SET 0 -# define SEEK_CUR 1 -# define SEEK_END 2 -#endif /* !SEEK_SET */ - -/* When sorting in core, this structure describes one line - and the position and length of its first keyfield. */ -struct lineinfo -{ - char *text; /* The actual text of the line. */ - union { - char *text; /* The start of the key (for textual comparison). */ - long number; /* The numeric value (for numeric comparison). */ - } key; - long keylen; /* Length of KEY field. */ -}; - -/* This structure describes a field to use as a sort key. */ -struct keyfield -{ - int startwords; /* Number of words to skip. */ - int startchars; /* Number of additional chars to skip. */ - int endwords; /* Number of words to ignore at end. */ - int endchars; /* Ditto for characters of last word. */ - char ignore_blanks; /* Non-zero means ignore spaces and tabs. */ - char fold_case; /* Non-zero means case doesn't matter. */ - char reverse; /* Non-zero means compare in reverse order. */ - char numeric; /* Non-zeros means field is ASCII numeric. */ - char positional; /* Sort according to file position. */ - char braced; /* Count balanced-braced groupings as fields. */ -}; - -/* Vector of keyfields to use. */ -struct keyfield keyfields[3]; - -/* Number of keyfields stored in that vector. */ -int num_keyfields = 3; - -/* Vector of input file names, terminated with a null pointer. */ -char **infiles; - -/* Vector of corresponding output file names, or NULL, meaning default it - (add an `s' to the end). */ -char **outfiles; - -/* Length of `infiles'. */ -int num_infiles; - -/* Pointer to the array of pointers to lines being sorted. */ -char **linearray; - -/* The allocated length of `linearray'. */ -long nlines; - -/* Directory to use for temporary files. On Unix, it ends with a slash. */ -char *tempdir; - -/* Start of filename to use for temporary files. */ -char *tempbase; - -/* Number of last temporary file. */ -int tempcount; - -/* Number of last temporary file already deleted. - Temporary files are deleted by `flush_tempfiles' in order of creation. */ -int last_deleted_tempcount; - -/* During in-core sort, this points to the base of the data block - which contains all the lines of data. */ -char *text_base; - -/* Additional command switches .*/ - -/* Nonzero means do not delete tempfiles -- for debugging. */ -int keep_tempfiles; - -/* The name this program was run with. */ -char *program_name; - -/* Forward declarations of functions in this file. */ - -void decode_command (); -void sort_in_core (); -void sort_offline (); -char **parsefile (); -char *find_field (); -char *find_pos (); -long find_value (); -char *find_braced_pos (); -char *find_braced_end (); -void writelines (); -int compare_field (); -int compare_full (); -long readline (); -int merge_files (); -int merge_direct (); -void pfatal_with_name (); -void fatal (); -void error (); -void *xmalloc (), *xrealloc (); -char *concat (); -char *maketempname (); -void flush_tempfiles (); -char *tempcopy (); - -#define MAX_IN_CORE_SORT 500000 - -void -main (argc, argv) - int argc; - char **argv; -{ - int i; - - tempcount = 0; - last_deleted_tempcount = 0; - program_name = argv[0]; - - /* Describe the kind of sorting to do. */ - /* The first keyfield uses the first braced field and folds case. */ - keyfields[0].braced = 1; - keyfields[0].fold_case = 1; - keyfields[0].endwords = -1; - keyfields[0].endchars = -1; - - /* The second keyfield uses the second braced field, numerically. */ - keyfields[1].braced = 1; - keyfields[1].numeric = 1; - keyfields[1].startwords = 1; - keyfields[1].endwords = -1; - keyfields[1].endchars = -1; - - /* The third keyfield (which is ignored while discarding duplicates) - compares the whole line. */ - keyfields[2].endwords = -1; - keyfields[2].endchars = -1; - - decode_command (argc, argv); - - tempbase = mktemp (concat ("txiXXXXXX", "", "")); - - /* Process input files completely, one by one. */ - - for (i = 0; i < num_infiles; i++) - { - int desc; - long ptr; - char *outfile; - - desc = open (infiles[i], O_RDONLY, 0); - if (desc < 0) - pfatal_with_name (infiles[i]); - lseek (desc, 0L, SEEK_END); - ptr = lseek (desc, 0L, SEEK_CUR); - - close (desc); - - outfile = outfiles[i]; - if (!outfile) - { - outfile = concat (infiles[i], "s", ""); - } - - if (ptr < MAX_IN_CORE_SORT) - /* Sort a small amount of data. */ - sort_in_core (infiles[i], ptr, outfile); - else - sort_offline (infiles[i], ptr, outfile); - } - - flush_tempfiles (tempcount); - exit (TI_NO_ERROR); -} - -void -usage () -{ - fprintf (stderr, "\ -Usage: %s [-k] infile [-o outfile] ...\n", program_name); - exit (1); -} - -/* Decode the command line arguments to set the parameter variables - and set up the vector of keyfields and the vector of input files. */ - -void -decode_command (argc, argv) - int argc; - char **argv; -{ - int optc; - char **ip; - char **op; - - /* Store default values into parameter variables. */ - - tempdir = getenv ("TMPDIR"); -#ifdef VMS - if (tempdir == NULL) - tempdir = "sys$scratch:"; -#else - if (tempdir == NULL) - tempdir = "/tmp/"; - else - tempdir = concat (tempdir, "/", ""); -#endif - - keep_tempfiles = 0; - - /* Allocate ARGC input files, which must be enough. */ - - infiles = (char **) xmalloc (argc * sizeof (char *)); - outfiles = (char **) xmalloc (argc * sizeof (char *)); - ip = infiles; - op = outfiles; - - while ((optc = getopt (argc, argv, "-ko:")) != EOF) - { - switch (optc) - { - case 1: /* Non-option filename. */ - *ip++ = optarg; - *op++ = NULL; - break; - - case 'k': - keep_tempfiles = 1; - break; - - case 'o': - if (op > outfiles) - *(op - 1) = optarg; - break; - - default: - usage (); - } - } - - /* Record number of keyfields and terminate list of filenames. */ - num_infiles = ip - infiles; - *ip = 0; - if (num_infiles == 0) - usage (); -} - -/* Return a name for a temporary file. */ - -char * -maketempname (count) - int count; -{ - char tempsuffix[10]; - sprintf (tempsuffix, "%d", count); - return concat (tempdir, tempbase, tempsuffix); -} - -/* Delete all temporary files up to TO_COUNT. */ - -void -flush_tempfiles (to_count) - int to_count; -{ - if (keep_tempfiles) - return; - while (last_deleted_tempcount < to_count) - unlink (maketempname (++last_deleted_tempcount)); -} - -/* Copy the input file open on IDESC into a temporary file - and return the temporary file name. */ - -#define BUFSIZE 1024 - -char * -tempcopy (idesc) - int idesc; -{ - char *outfile = maketempname (++tempcount); - int odesc; - char buffer[BUFSIZE]; - - odesc = open (outfile, O_WRONLY | O_CREAT, 0666); - - if (odesc < 0) - pfatal_with_name (outfile); - - while (1) - { - int nread = read (idesc, buffer, BUFSIZE); - write (odesc, buffer, nread); - if (!nread) - break; - } - - close (odesc); - - return outfile; -} - -/* Compare LINE1 and LINE2 according to the specified set of keyfields. */ - -int -compare_full (line1, line2) - char **line1, **line2; -{ - int i; - - /* Compare using the first keyfield; - if that does not distinguish the lines, try the second keyfield; - and so on. */ - - for (i = 0; i < num_keyfields; i++) - { - long length1, length2; - char *start1 = find_field (&keyfields[i], *line1, &length1); - char *start2 = find_field (&keyfields[i], *line2, &length2); - int tem = compare_field (&keyfields[i], start1, length1, *line1 - text_base, - start2, length2, *line2 - text_base); - if (tem) - { - if (keyfields[i].reverse) - return -tem; - return tem; - } - } - - return 0; /* Lines match exactly. */ -} - -/* Compare LINE1 and LINE2, described by structures - in which the first keyfield is identified in advance. - For positional sorting, assumes that the order of the lines in core - reflects their nominal order. */ - -int -compare_prepared (line1, line2) - struct lineinfo *line1, *line2; -{ - int i; - int tem; - char *text1, *text2; - - /* Compare using the first keyfield, which has been found for us already. */ - if (keyfields->positional) - { - if (line1->text - text_base > line2->text - text_base) - tem = 1; - else - tem = -1; - } - else if (keyfields->numeric) - tem = line1->key.number - line2->key.number; - else - tem = compare_field (keyfields, line1->key.text, line1->keylen, 0, - line2->key.text, line2->keylen, 0); - if (tem) - { - if (keyfields->reverse) - return -tem; - return tem; - } - - text1 = line1->text; - text2 = line2->text; - - /* Compare using the second keyfield; - if that does not distinguish the lines, try the third keyfield; - and so on. */ - - for (i = 1; i < num_keyfields; i++) - { - long length1, length2; - char *start1 = find_field (&keyfields[i], text1, &length1); - char *start2 = find_field (&keyfields[i], text2, &length2); - int tem = compare_field (&keyfields[i], start1, length1, text1 - text_base, - start2, length2, text2 - text_base); - if (tem) - { - if (keyfields[i].reverse) - return -tem; - return tem; - } - } - - return 0; /* Lines match exactly. */ -} - -/* Like compare_full but more general. - You can pass any strings, and you can say how many keyfields to use. - POS1 and POS2 should indicate the nominal positional ordering of - the two lines in the input. */ - -int -compare_general (str1, str2, pos1, pos2, use_keyfields) - char *str1, *str2; - long pos1, pos2; - int use_keyfields; -{ - int i; - - /* Compare using the first keyfield; - if that does not distinguish the lines, try the second keyfield; - and so on. */ - - for (i = 0; i < use_keyfields; i++) - { - long length1, length2; - char *start1 = find_field (&keyfields[i], str1, &length1); - char *start2 = find_field (&keyfields[i], str2, &length2); - int tem = compare_field (&keyfields[i], start1, length1, pos1, - start2, length2, pos2); - if (tem) - { - if (keyfields[i].reverse) - return -tem; - return tem; - } - } - - return 0; /* Lines match exactly. */ -} - -/* Find the start and length of a field in STR according to KEYFIELD. - A pointer to the starting character is returned, and the length - is stored into the int that LENGTHPTR points to. */ - -char * -find_field (keyfield, str, lengthptr) - struct keyfield *keyfield; - char *str; - long *lengthptr; -{ - char *start; - char *end; - char *(*fun) (); - - if (keyfield->braced) - fun = find_braced_pos; - else - fun = find_pos; - - start = (*fun) (str, keyfield->startwords, keyfield->startchars, - keyfield->ignore_blanks); - if (keyfield->endwords < 0) - { - if (keyfield->braced) - end = find_braced_end (start); - else - { - end = start; - while (*end && *end != '\n') - end++; - } - } - else - { - end = (*fun) (str, keyfield->endwords, keyfield->endchars, 0); - if (end - str < start - str) - end = start; - } - *lengthptr = end - start; - return start; -} - -/* Return a pointer to a specified place within STR, - skipping (from the beginning) WORDS words and then CHARS chars. - If IGNORE_BLANKS is nonzero, we skip all blanks - after finding the specified word. */ - -char * -find_pos (str, words, chars, ignore_blanks) - char *str; - int words, chars; - int ignore_blanks; -{ - int i; - char *p = str; - - for (i = 0; i < words; i++) - { - char c; - /* Find next bunch of nonblanks and skip them. */ - while ((c = *p) == ' ' || c == '\t') - p++; - while ((c = *p) && c != '\n' && !(c == ' ' || c == '\t')) - p++; - if (!*p || *p == '\n') - return p; - } - - while (*p == ' ' || *p == '\t') - p++; - - for (i = 0; i < chars; i++) - { - if (!*p || *p == '\n') - break; - p++; - } - return p; -} - -/* Like find_pos but assumes that each field is surrounded by braces - and that braces within fields are balanced. */ - -char * -find_braced_pos (str, words, chars, ignore_blanks) - char *str; - int words, chars; - int ignore_blanks; -{ - int i; - int bracelevel; - char *p = str; - char c; - - for (i = 0; i < words; i++) - { - bracelevel = 1; - while ((c = *p++) != '{' && c != '\n' && c) - /* Do nothing. */ ; - if (c != '{') - return p - 1; - while (bracelevel) - { - c = *p++; - if (c == '{') - bracelevel++; - if (c == '}') - bracelevel--; - if (c == 0 || c == '\n') - return p - 1; - } - } - - while ((c = *p++) != '{' && c != '\n' && c) - /* Do nothing. */ ; - - if (c != '{') - return p - 1; - - if (ignore_blanks) - while ((c = *p) == ' ' || c == '\t') - p++; - - for (i = 0; i < chars; i++) - { - if (!*p || *p == '\n') - break; - p++; - } - return p; -} - -/* Find the end of the balanced-brace field which starts at STR. - The position returned is just before the closing brace. */ - -char * -find_braced_end (str) - char *str; -{ - int bracelevel; - char *p = str; - char c; - - bracelevel = 1; - while (bracelevel) - { - c = *p++; - if (c == '{') - bracelevel++; - if (c == '}') - bracelevel--; - if (c == 0 || c == '\n') - return p - 1; - } - return p - 1; -} - -long -find_value (start, length) - char *start; - long length; -{ - while (length != 0L) - { - if (isdigit (*start)) - return atol (start); - length--; - start++; - } - return 0l; -} - -/* Vector used to translate characters for comparison. - This is how we make all alphanumerics follow all else, - and ignore case in the first sorting. */ -int char_order[256]; - -void -init_char_order () -{ - int i; - for (i = 1; i < 256; i++) - char_order[i] = i; - - for (i = '0'; i <= '9'; i++) - char_order[i] += 512; - - for (i = 'a'; i <= 'z'; i++) - { - char_order[i] = 512 + i; - char_order[i + 'A' - 'a'] = 512 + i; - } -} - -/* Compare two fields (each specified as a start pointer and a character count) - according to KEYFIELD. - The sign of the value reports the relation between the fields. */ - -int -compare_field (keyfield, start1, length1, pos1, start2, length2, pos2) - struct keyfield *keyfield; - char *start1; - long length1; - long pos1; - char *start2; - long length2; - long pos2; -{ - if (keyfields->positional) - { - if (pos1 > pos2) - return 1; - else - return -1; - } - if (keyfield->numeric) - { - long value = find_value (start1, length1) - find_value (start2, length2); - if (value > 0) - return 1; - if (value < 0) - return -1; - return 0; - } - else - { - char *p1 = start1; - char *p2 = start2; - char *e1 = start1 + length1; - char *e2 = start2 + length2; - - while (1) - { - int c1, c2; - - if (p1 == e1) - c1 = 0; - else - c1 = *p1++; - if (p2 == e2) - c2 = 0; - else - c2 = *p2++; - - if (char_order[c1] != char_order[c2]) - return char_order[c1] - char_order[c2]; - if (!c1) - break; - } - - /* Strings are equal except possibly for case. */ - p1 = start1; - p2 = start2; - while (1) - { - int c1, c2; - - if (p1 == e1) - c1 = 0; - else - c1 = *p1++; - if (p2 == e2) - c2 = 0; - else - c2 = *p2++; - - if (c1 != c2) - /* Reverse sign here so upper case comes out last. */ - return c2 - c1; - if (!c1) - break; - } - - return 0; - } -} - -/* A `struct linebuffer' is a structure which holds a line of text. - `readline' reads a line from a stream into a linebuffer - and works regardless of the length of the line. */ - -struct linebuffer -{ - long size; - char *buffer; -}; - -/* Initialize LINEBUFFER for use. */ - -void -initbuffer (linebuffer) - struct linebuffer *linebuffer; -{ - linebuffer->size = 200; - linebuffer->buffer = (char *) xmalloc (200); -} - -/* Read a line of text from STREAM into LINEBUFFER. - Return the length of the line. */ - -long -readline (linebuffer, stream) - struct linebuffer *linebuffer; - FILE *stream; -{ - char *buffer = linebuffer->buffer; - char *p = linebuffer->buffer; - char *end = p + linebuffer->size; - - while (1) - { - int c = getc (stream); - if (p == end) - { - buffer = (char *) xrealloc (buffer, linebuffer->size *= 2); - p += buffer - linebuffer->buffer; - end += buffer - linebuffer->buffer; - linebuffer->buffer = buffer; - } - if (c < 0 || c == '\n') - { - *p = 0; - break; - } - *p++ = c; - } - - return p - buffer; -} - -/* Sort an input file too big to sort in core. */ - -void -sort_offline (infile, nfiles, total, outfile) - char *infile; - int nfiles; - long total; - char *outfile; -{ - /* More than enough. */ - int ntemps = 2 * (total + MAX_IN_CORE_SORT - 1) / MAX_IN_CORE_SORT; - char **tempfiles = (char **) xmalloc (ntemps * sizeof (char *)); - FILE *istream = fopen (infile, "r"); - int i; - struct linebuffer lb; - long linelength; - int failure = 0; - - initbuffer (&lb); - - /* Read in one line of input data. */ - - linelength = readline (&lb, istream); - - if (lb.buffer[0] != '\\' && lb.buffer[0] != '@') - { - error ("%s: not a texinfo index file", infile); - return; - } - - /* Split up the input into `ntemps' temporary files, or maybe fewer, - and put the new files' names into `tempfiles' */ - - for (i = 0; i < ntemps; i++) - { - char *outname = maketempname (++tempcount); - FILE *ostream = fopen (outname, "w"); - long tempsize = 0; - - if (!ostream) - pfatal_with_name (outname); - tempfiles[i] = outname; - - /* Copy lines into this temp file as long as it does not make file - "too big" or until there are no more lines. */ - - while (tempsize + linelength + 1 <= MAX_IN_CORE_SORT) - { - tempsize += linelength + 1; - fputs (lb.buffer, ostream); - putc ('\n', ostream); - - /* Read another line of input data. */ - - linelength = readline (&lb, istream); - if (!linelength && feof (istream)) - break; - - if (lb.buffer[0] != '\\' && lb.buffer[0] != '@') - { - error ("%s: not a texinfo index file", infile); - failure = 1; - goto fail; - } - } - fclose (ostream); - if (feof (istream)) - break; - } - - free (lb.buffer); - -fail: - /* Record number of temp files we actually needed. */ - - ntemps = i; - - /* Sort each tempfile into another tempfile. - Delete the first set of tempfiles and put the names of the second - into `tempfiles'. */ - - for (i = 0; i < ntemps; i++) - { - char *newtemp = maketempname (++tempcount); - sort_in_core (&tempfiles[i], MAX_IN_CORE_SORT, newtemp); - if (!keep_tempfiles) - unlink (tempfiles[i]); - tempfiles[i] = newtemp; - } - - if (failure) - return; - - /* Merge the tempfiles together and indexify. */ - - merge_files (tempfiles, ntemps, outfile); -} - -/* Sort INFILE, whose size is TOTAL, - assuming that is small enough to be done in-core, - then indexify it and send the output to OUTFILE (or to stdout). */ - -void -sort_in_core (infile, total, outfile) - char *infile; - long total; - char *outfile; -{ - char **nextline; - char *data = (char *) xmalloc (total + 1); - char *file_data; - long file_size; - int i; - FILE *ostream = stdout; - struct lineinfo *lineinfo; - - /* Read the contents of the file into the moby array `data'. */ - - int desc = open (infile, O_RDONLY, 0); - - if (desc < 0) - fatal ("failure reopening %s", infile); - for (file_size = 0;;) - { - i = read (desc, data + file_size, total - file_size); - if (i <= 0) - break; - file_size += i; - } - file_data = data; - data[file_size] = 0; - - close (desc); - - if (file_size > 0 && data[0] != '\\' && data[0] != '@') - { - error ("%s: not a texinfo index file", infile); - return; - } - - init_char_order (); - - /* Sort routines want to know this address. */ - - text_base = data; - - /* Create the array of pointers to lines, with a default size - frequently enough. */ - - nlines = total / 50; - if (!nlines) - nlines = 2; - linearray = (char **) xmalloc (nlines * sizeof (char *)); - - /* `nextline' points to the next free slot in this array. - `nlines' is the allocated size. */ - - nextline = linearray; - - /* Parse the input file's data, and make entries for the lines. */ - - nextline = parsefile (infile, nextline, file_data, file_size); - if (nextline == 0) - { - error ("%s: not a texinfo index file", infile); - return; - } - - /* Sort the lines. */ - - /* If we have enough space, find the first keyfield of each line in advance. - Make a `struct lineinfo' for each line, which records the keyfield - as well as the line, and sort them. */ - - lineinfo = (struct lineinfo *) malloc ((nextline - linearray) * sizeof (struct lineinfo)); - - if (lineinfo) - { - struct lineinfo *lp; - char **p; - - for (lp = lineinfo, p = linearray; p != nextline; lp++, p++) - { - lp->text = *p; - lp->key.text = find_field (keyfields, *p, &lp->keylen); - if (keyfields->numeric) - lp->key.number = find_value (lp->key.text, lp->keylen); - } - - qsort (lineinfo, nextline - linearray, sizeof (struct lineinfo), compare_prepared); - - for (lp = lineinfo, p = linearray; p != nextline; lp++, p++) - *p = lp->text; - - free (lineinfo); - } - else - qsort (linearray, nextline - linearray, sizeof (char *), compare_full); - - /* Open the output file. */ - - if (outfile) - { - ostream = fopen (outfile, "w"); - if (!ostream) - pfatal_with_name (outfile); - } - - writelines (linearray, nextline - linearray, ostream); - if (outfile) - fclose (ostream); - - free (linearray); - free (data); -} - -/* Parse an input string in core into lines. - DATA is the input string, and SIZE is its length. - Data goes in LINEARRAY starting at NEXTLINE. - The value returned is the first entry in LINEARRAY still unused. - Value 0 means input file contents are invalid. */ - -char ** -parsefile (filename, nextline, data, size) - char *filename; - char **nextline; - char *data; - long size; -{ - char *p, *end; - char **line = nextline; - - p = data; - end = p + size; - *end = 0; - - while (p != end) - { - if (p[0] != '\\' && p[0] != '@') - return 0; - - *line = p; - while (*p && *p != '\n') - p++; - if (p != end) - p++; - - line++; - if (line == linearray + nlines) - { - char **old = linearray; - linearray = (char **) xrealloc (linearray, sizeof (char *) * (nlines *= 4)); - line += linearray - old; - } - } - - return line; -} - -/* Indexification is a filter applied to the sorted lines - as they are being written to the output file. - Multiple entries for the same name, with different page numbers, - get combined into a single entry with multiple page numbers. - The first braced field, which is used for sorting, is discarded. - However, its first character is examined, folded to lower case, - and if it is different from that in the previous line fed to us - a \initial line is written with one argument, the new initial. - - If an entry has four braced fields, then the second and third - constitute primary and secondary names. - In this case, each change of primary name - generates a \primary line which contains only the primary name, - and in between these are \secondary lines which contain - just a secondary name and page numbers. */ - -/* The last primary name we wrote a \primary entry for. - If only one level of indexing is being done, this is the last name seen. */ -char *lastprimary; -/* Length of storage allocated for lastprimary. */ -int lastprimarylength; - -/* Similar, for the secondary name. */ -char *lastsecondary; -int lastsecondarylength; - -/* Zero if we are not in the middle of writing an entry. - One if we have written the beginning of an entry but have not - yet written any page numbers into it. - Greater than one if we have written the beginning of an entry - plus at least one page number. */ -int pending; - -/* The initial (for sorting purposes) of the last primary entry written. - When this changes, a \initial {c} line is written */ - -char *lastinitial; - -int lastinitiallength; - -/* When we need a string of length 1 for the value of lastinitial, - store it here. */ - -char lastinitial1[2]; - -/* Initialize static storage for writing an index. */ - -void -init_index () -{ - pending = 0; - lastinitial = lastinitial1; - lastinitial1[0] = 0; - lastinitial1[1] = 0; - lastinitiallength = 0; - lastprimarylength = 100; - lastprimary = (char *) xmalloc (lastprimarylength + 1); - bzero (lastprimary, lastprimarylength + 1); - lastsecondarylength = 100; - lastsecondary = (char *) xmalloc (lastsecondarylength + 1); - bzero (lastsecondary, lastsecondarylength + 1); -} - -/* Indexify. Merge entries for the same name, - insert headers for each initial character, etc. */ - -void -indexify (line, ostream) - char *line; - FILE *ostream; -{ - char *primary, *secondary, *pagenumber; - int primarylength, secondarylength = 0, pagelength; - int nosecondary; - int initiallength; - char *initial; - char initial1[2]; - register char *p; - - /* First, analyze the parts of the entry fed to us this time. */ - - p = find_braced_pos (line, 0, 0, 0); - if (*p == '{') - { - initial = p; - /* Get length of inner pair of braces starting at `p', - including that inner pair of braces. */ - initiallength = find_braced_end (p + 1) + 1 - p; - } - else - { - initial = initial1; - initial1[0] = *p; - initial1[1] = 0; - initiallength = 1; - - if (initial1[0] >= 'a' && initial1[0] <= 'z') - initial1[0] -= 040; - } - - pagenumber = find_braced_pos (line, 1, 0, 0); - pagelength = find_braced_end (pagenumber) - pagenumber; - if (pagelength == 0) - abort (); - - primary = find_braced_pos (line, 2, 0, 0); - primarylength = find_braced_end (primary) - primary; - - secondary = find_braced_pos (line, 3, 0, 0); - nosecondary = !*secondary; - if (!nosecondary) - secondarylength = find_braced_end (secondary) - secondary; - - /* If the primary is different from before, make a new primary entry. */ - if (strncmp (primary, lastprimary, primarylength)) - { - /* Close off current secondary entry first, if one is open. */ - if (pending) - { - fputs ("}\n", ostream); - pending = 0; - } - - /* If this primary has a different initial, include an entry for - the initial. */ - if (initiallength != lastinitiallength || - strncmp (initial, lastinitial, initiallength)) - { - fprintf (ostream, "\\initial {"); - fwrite (initial, 1, initiallength, ostream); - fprintf (ostream, "}\n", initial); - if (initial == initial1) - { - lastinitial = lastinitial1; - *lastinitial1 = *initial1; - } - else - { - lastinitial = initial; - } - lastinitiallength = initiallength; - } - - /* Make the entry for the primary. */ - if (nosecondary) - fputs ("\\entry {", ostream); - else - fputs ("\\primary {", ostream); - fwrite (primary, primarylength, 1, ostream); - if (nosecondary) - { - fputs ("}{", ostream); - pending = 1; - } - else - fputs ("}\n", ostream); - - /* Record name of most recent primary. */ - if (lastprimarylength < primarylength) - { - lastprimarylength = primarylength + 100; - lastprimary = (char *) xrealloc (lastprimary, - 1 + lastprimarylength); - } - strncpy (lastprimary, primary, primarylength); - lastprimary[primarylength] = 0; - - /* There is no current secondary within this primary, now. */ - lastsecondary[0] = 0; - } - - /* Should not have an entry with no subtopic following one with a subtopic. */ - - if (nosecondary && *lastsecondary) - error ("entry %s follows an entry with a secondary name", line); - - /* Start a new secondary entry if necessary. */ - if (!nosecondary && strncmp (secondary, lastsecondary, secondarylength)) - { - if (pending) - { - fputs ("}\n", ostream); - pending = 0; - } - - /* Write the entry for the secondary. */ - fputs ("\\secondary {", ostream); - fwrite (secondary, secondarylength, 1, ostream); - fputs ("}{", ostream); - pending = 1; - - /* Record name of most recent secondary. */ - if (lastsecondarylength < secondarylength) - { - lastsecondarylength = secondarylength + 100; - lastsecondary = (char *) xrealloc (lastsecondary, - 1 + lastsecondarylength); - } - strncpy (lastsecondary, secondary, secondarylength); - lastsecondary[secondarylength] = 0; - } - - /* Here to add one more page number to the current entry. */ - if (pending++ != 1) - fputs (", ", ostream); /* Punctuate first, if this is not the first. */ - fwrite (pagenumber, pagelength, 1, ostream); -} - -/* Close out any unfinished output entry. */ - -void -finish_index (ostream) - FILE *ostream; -{ - if (pending) - fputs ("}\n", ostream); - free (lastprimary); - free (lastsecondary); -} - -/* Copy the lines in the sorted order. - Each line is copied out of the input file it was found in. */ - -void -writelines (linearray, nlines, ostream) - char **linearray; - int nlines; - FILE *ostream; -{ - char **stop_line = linearray + nlines; - char **next_line; - - init_index (); - - /* Output the text of the lines, and free the buffer space. */ - - for (next_line = linearray; next_line != stop_line; next_line++) - { - /* If -u was specified, output the line only if distinct from previous one. */ - if (next_line == linearray - /* Compare previous line with this one, using only the - explicitly specd keyfields. */ - || compare_general (*(next_line - 1), *next_line, 0L, 0L, num_keyfields - 1)) - { - char *p = *next_line; - char c; - - while ((c = *p++) && c != '\n') - /* Do nothing. */ ; - *(p - 1) = 0; - indexify (*next_line, ostream); - } - } - - finish_index (ostream); -} - -/* Assume (and optionally verify) that each input file is sorted; - merge them and output the result. - Returns nonzero if any input file fails to be sorted. - - This is the high-level interface that can handle an unlimited - number of files. */ - -#define MAX_DIRECT_MERGE 10 - -int -merge_files (infiles, nfiles, outfile) - char **infiles; - int nfiles; - char *outfile; -{ - char **tempfiles; - int ntemps; - int i; - int value = 0; - int start_tempcount = tempcount; - - if (nfiles <= MAX_DIRECT_MERGE) - return merge_direct (infiles, nfiles, outfile); - - /* Merge groups of MAX_DIRECT_MERGE input files at a time, - making a temporary file to hold each group's result. */ - - ntemps = (nfiles + MAX_DIRECT_MERGE - 1) / MAX_DIRECT_MERGE; - tempfiles = (char **) xmalloc (ntemps * sizeof (char *)); - for (i = 0; i < ntemps; i++) - { - int nf = MAX_DIRECT_MERGE; - if (i + 1 == ntemps) - nf = nfiles - i * MAX_DIRECT_MERGE; - tempfiles[i] = maketempname (++tempcount); - value |= merge_direct (&infiles[i * MAX_DIRECT_MERGE], nf, tempfiles[i]); - } - - /* All temporary files that existed before are no longer needed - since their contents have been merged into our new tempfiles. - So delete them. */ - flush_tempfiles (start_tempcount); - - /* Now merge the temporary files we created. */ - - merge_files (tempfiles, ntemps, outfile); - - free (tempfiles); - - return value; -} - -/* Assume (and optionally verify) that each input file is sorted; - merge them and output the result. - Returns nonzero if any input file fails to be sorted. - - This version of merging will not work if the number of - input files gets too high. Higher level functions - use it only with a bounded number of input files. */ - -int -merge_direct (infiles, nfiles, outfile) - char **infiles; - int nfiles; - char *outfile; -{ - struct linebuffer *lb1, *lb2; - struct linebuffer **thisline, **prevline; - FILE **streams; - int i; - int nleft; - int lossage = 0; - int *file_lossage; - struct linebuffer *prev_out = 0; - FILE *ostream = stdout; - - if (outfile) - { - ostream = fopen (outfile, "w"); - } - if (!ostream) - pfatal_with_name (outfile); - - init_index (); - - if (nfiles == 0) - { - if (outfile) - fclose (ostream); - return 0; - } - - /* For each file, make two line buffers. - Also, for each file, there is an element of `thisline' - which points at any time to one of the file's two buffers, - and an element of `prevline' which points to the other buffer. - `thisline' is supposed to point to the next available line from the file, - while `prevline' holds the last file line used, - which is remembered so that we can verify that the file is properly sorted. */ - - /* lb1 and lb2 contain one buffer each per file. */ - lb1 = (struct linebuffer *) xmalloc (nfiles * sizeof (struct linebuffer)); - lb2 = (struct linebuffer *) xmalloc (nfiles * sizeof (struct linebuffer)); - - /* thisline[i] points to the linebuffer holding the next available line in file i, - or is zero if there are no lines left in that file. */ - thisline = (struct linebuffer **) - xmalloc (nfiles * sizeof (struct linebuffer *)); - /* prevline[i] points to the linebuffer holding the last used line - from file i. This is just for verifying that file i is properly - sorted. */ - prevline = (struct linebuffer **) - xmalloc (nfiles * sizeof (struct linebuffer *)); - /* streams[i] holds the input stream for file i. */ - streams = (FILE **) xmalloc (nfiles * sizeof (FILE *)); - /* file_lossage[i] is nonzero if we already know file i is not - properly sorted. */ - file_lossage = (int *) xmalloc (nfiles * sizeof (int)); - - /* Allocate and initialize all that storage. */ - - for (i = 0; i < nfiles; i++) - { - initbuffer (&lb1[i]); - initbuffer (&lb2[i]); - thisline[i] = &lb1[i]; - prevline[i] = &lb2[i]; - file_lossage[i] = 0; - streams[i] = fopen (infiles[i], "r"); - if (!streams[i]) - pfatal_with_name (infiles[i]); - - readline (thisline[i], streams[i]); - } - - /* Keep count of number of files not at eof. */ - nleft = nfiles; - - while (nleft) - { - struct linebuffer *best = 0; - struct linebuffer *exch; - int bestfile = -1; - int i; - - /* Look at the next avail line of each file; choose the least one. */ - - for (i = 0; i < nfiles; i++) - { - if (thisline[i] && - (!best || - 0 < compare_general (best->buffer, thisline[i]->buffer, - (long) bestfile, (long) i, num_keyfields))) - { - best = thisline[i]; - bestfile = i; - } - } - - /* Output that line, unless it matches the previous one and we - don't want duplicates. */ - - if (!(prev_out && - !compare_general (prev_out->buffer, - best->buffer, 0L, 1L, num_keyfields - 1))) - indexify (best->buffer, ostream); - prev_out = best; - - /* Now make the line the previous of its file, and fetch a new - line from that file. */ - - exch = prevline[bestfile]; - prevline[bestfile] = thisline[bestfile]; - thisline[bestfile] = exch; - - while (1) - { - /* If the file has no more, mark it empty. */ - - if (feof (streams[bestfile])) - { - thisline[bestfile] = 0; - /* Update the number of files still not empty. */ - nleft--; - break; - } - readline (thisline[bestfile], streams[bestfile]); - if (thisline[bestfile]->buffer[0] || !feof (streams[bestfile])) - break; - } - } - - finish_index (ostream); - - /* Free all storage and close all input streams. */ - - for (i = 0; i < nfiles; i++) - { - fclose (streams[i]); - free (lb1[i].buffer); - free (lb2[i].buffer); - } - free (file_lossage); - free (lb1); - free (lb2); - free (thisline); - free (prevline); - free (streams); - - if (outfile) - fclose (ostream); - - return lossage; -} - -/* Print error message and exit. */ - -void -fatal (s1, s2) - char *s1, *s2; -{ - error (s1, s2); - exit (TI_FATAL_ERROR); -} - -/* Print error message. S1 is printf control string, S2 is arg for it. */ - -void -error (s1, s2) - char *s1, *s2; -{ - printf ("%s: ", program_name); - printf (s1, s2); - printf ("\n"); -} - -void -perror_with_name (name) - char *name; -{ - char *s; - - if (errno < sys_nerr) - s = concat ("", sys_errlist[errno], " for %s"); - else - s = "cannot open %s"; - error (s, name); -} - -void -pfatal_with_name (name) - char *name; -{ - char *s; - - if (errno < sys_nerr) - s = concat ("", sys_errlist[errno], " for %s"); - else - s = "cannot open %s"; - fatal (s, name); -} - -/* Return a newly-allocated string whose contents concatenate those of - S1, S2, S3. */ - -char * -concat (s1, s2, s3) - char *s1, *s2, *s3; -{ - int len1 = strlen (s1), len2 = strlen (s2), len3 = strlen (s3); - char *result = (char *) xmalloc (len1 + len2 + len3 + 1); - - strcpy (result, s1); - strcpy (result + len1, s2); - strcpy (result + len1 + len2, s3); - *(result + len1 + len2 + len3) = 0; - - return result; -} - -/* Just like malloc, but kills the program in case of fatal error. */ -void * -xmalloc (nbytes) - int nbytes; -{ - void *temp = (void *) malloc (nbytes); - - if (nbytes && temp == (void *)NULL) - memory_error ("xmalloc", nbytes); - - return (temp); -} - -/* Like realloc (), but barfs if there isn't enough memory. */ -void * -xrealloc (pointer, nbytes) - void *pointer; - int nbytes; -{ - void *temp; - - if (!pointer) - temp = (void *)xmalloc (nbytes); - else - temp = (void *)realloc (pointer, nbytes); - - if (nbytes && !temp) - memory_error ("xrealloc", nbytes); - - return (temp); -} - -memory_error (callers_name, bytes_wanted) - char *callers_name; - int bytes_wanted; -{ - char printable_string[80]; - - sprintf (printable_string, - "Virtual memory exhausted in %s ()! Needed %d bytes.", - callers_name, bytes_wanted); - - error (printable_string); - abort (); -} - -#ifndef STDC_HEADERS -void -bzero (b, length) - register char *b; - register int length; -{ -#ifdef VMS - short zero = 0; - long max_str = 65535; - - while (length > max_str) - { - (void) LIB$MOVC5 (&zero, &zero, &zero, &max_str, b); - length -= max_str; - b += max_str; - } - (void) LIB$MOVC5 (&zero, &zero, &zero, &length, b); -#else - while (length-- > 0) - *b++ = 0; -#endif /* not VMS */ -} -#endif /* not STDC_HEADERS */ diff --git a/Master/texmf-dist/doc/support/texdraw/txi-src.tgz b/Master/texmf-dist/doc/support/texdraw/txi-src.tgz Binary files differnew file mode 100644 index 00000000000..dc6fce03146 --- /dev/null +++ b/Master/texmf-dist/doc/support/texdraw/txi-src.tgz diff --git a/Master/texmf-dist/tex/generic/texdraw/texdraw.tex b/Master/texmf-dist/tex/generic/texdraw/texdraw.tex index 9b354424510..4201bf77c8d 100644 --- a/Master/texmf-dist/tex/generic/texdraw/texdraw.tex +++ b/Master/texmf-dist/tex/generic/texdraw/texdraw.tex @@ -18,563 +18,1117 @@ % Canada H3A 2A7 % kabal@TSP.EE.McGill.CA + \def\setRevDate $#1 #2 #3${#2} \def\TeXdrawId{\setRevDate $Date: 1995/12/19 16:40:42 $ TeXdraw V2R0} + +% =============================================================== + +% The TeXdraw macros allow PostScript line drawings and such to be +% generated from within TeX and LaTeX. +% (1) TeXdraw allows TeX text (either horizontal or rotated) to be +% superimposed on the figure. +% (2) TeXdraw implements a \bsegment-\esegment environment which allows +% parameter changes and coordinate changes to be kept local. In +% effect, these segments are self-contained relocatable procedures. +% (3) TeX's macro facility can be used to modularize drawing units and +% produce more complex entities from simple elements. +% (4) The drawing can be positioned on the page like any other TeX box. + +% TeXdraw coordinate units have positive X to the right and positive Y up. +% The drawing units can be selected (initially inches). In addition, two +% scaling parameters - unit scale and segment scale - are available. Their +% effects are multiplicative. + +% Segments allow for relocatable drawing units. Inside each segment the +% coordinates are relative to the initial point, which becomes (0 0). +% Scaling is local to segments. Each segment inherits the unit scale +% scaling from outside the segment, but any changes apply to that segment +% and inferior segments. The segment scale factor is reset to unity on +% entry to each segment. + +% The coordinates given as command arguments are used to determine +% the size of the drawing. The width of the plot line, sizes of +% arrowheads, arcs or text do not affect the size of the drawing. + +% TeXdraw writes PostScript commands to an intermediate file. After the +% drawing is finished, the PostScript file is included in the document as a +% PostSript include file. + +% This file is divided into 4 parts, +% - TeXdraw user interface +% - Utility definitions +% - Low level definitions +% - PostScript file macros + + \chardef\catamp=\the\catcode`\@ \catcode`\@=11 -\long + +% =============================================================== +% ===== TeXdraw user interface ================================== +\long % \centertexdraw needs to be very \long \def\centertexdraw #1{\hbox to \hsize{\hss -\btexdraw #1\etexdraw -\hss}} + \btexdraw #1\etexdraw + \hss}} + +% ====== Begin TeXdraw +% Inside the texdraw box: +% The \vbox should be of zero size; none of the TeXdraw drawing commands +% generate text, the TeXdraw text commands generate zero size boxes. + \def\btexdraw {\x@pix=0 \y@pix=0 -\x@segoffpix=\x@pix \y@segoffpix=\y@pix -\t@exdrawdef -\setbox\t@xdbox=\vbox\bgroup\offinterlineskip -\global\d@bs=0 -\global\t@extonlytrue -\global\p@osinitfalse -\s@avemove \x@pix \y@pix -\m@pendingfalse -\global\p@osinitfalse -\p@athfalse -\the\everytexdraw} + \x@segoffpix=\x@pix \y@segoffpix=\y@pix +% Set the default values (define outside of the group so that \etexdraw can +% see the scaling parameters) + \t@exdrawdef + \setbox\t@xdbox=\vbox\bgroup\offinterlineskip + \global\d@bs=0 % pending segments + \global\t@extonlytrue % no PS commands yet + \global\p@osinitfalse + \s@avemove \x@pix \y@pix % capture the initial position + \m@pendingfalse + \global\p@osinitfalse % capture the next move + \p@athfalse + \the\everytexdraw} + +% ====== End TeXdraw +% Write out a trailer, close the file, bring in the PostScript code as +% a \special include file. The \special is offset to position on the page +% to be (llx,ury) in PostScript coordinates. + +% The drawing is placed in a \vbox of appropriate size (zero depth). The +% temporary PostScript file is superimposed with offsets such that the +% lower lefthand corner of the drawing is aligned with the lower lefthand of +% the box. Then, the position is temporarily offset to that corresponding +% to (0 0) to place the TeX text. Note that TeX text goes on top of the +% PostScript drawing. \def\etexdraw {\ift@extonly \else -\t@drclose -\fi -\egroup -\ifdim \wd\t@xdbox>0pt -\t@xderror {TeXdraw box non-zero size, -possible extraneous text}% -\fi -\vbox {\offinterlineskip -\pixtobp \xminpix \l@lxbp \pixtobp \yminpix \l@lybp -\pixtobp \xmaxpix \u@rxbp \pixtobp \ymaxpix \u@rybp -\hbox{\t@xdinclude -[{\l@lxbp},{\l@lybp}][{\u@rxbp},{\u@rybp}]{\p@sfile}}% -\pixtodim \xminpix \t@xpos \pixtodim \yminpix \t@ypos -\kern \t@ypos -\hbox {\kern -\t@xpos -\box\t@xdbox -\kern \t@xpos}% -\kern -\t@ypos\relax}} + \t@drclose % close the PostScript file + \fi + \egroup % ends the \vbox \bgroup + \ifdim \wd\t@xdbox>0pt + \t@xderror {TeXdraw box non-zero size, + possible extraneous text}% + \fi + \vbox {\offinterlineskip + \pixtobp \xminpix \l@lxbp \pixtobp \yminpix \l@lybp + \pixtobp \xmaxpix \u@rxbp \pixtobp \ymaxpix \u@rybp + \hbox{\t@xdinclude + [{\l@lxbp},{\l@lybp}][{\u@rxbp},{\u@rybp}]{\p@sfile}}% + \pixtodim \xminpix \t@xpos \pixtodim \yminpix \t@ypos + \kern \t@ypos + \hbox {\kern -\t@xpos + \box\t@xdbox % TeX text + \kern \t@xpos}% + \kern -\t@ypos\relax}} + +% ===== Drawing scaling +% The units in any segment may be scaled arbitrarily. A unit scale is +% local to a segment but affects enclosed segments unless specifically +% overridden in that segment. In addition there is a segment scale. The +% overall scale is the product of the two scaling factors. +% +% Scaling is handled entirely on the TeX side, the PostScript side gets +% absolute pixel coordinates. + +% Drawing units, e.g. "in" or "cm" \def\drawdim #1 {\def\d@dim{#1\relax}} + +% \u@nitsc - unit scale +% \s@egsc - segment scale +% \d@sc - drawing scale, product of the unit scale and segment scale + +% Note that successive application of relative scale factors can lead +% to poor accuracy of the final scale factor. Each scale factor is +% represented to about 5 decimal digits after the decimal point. \def\setunitscale #1 {\edef\u@nitsc{#1}% -\realmult \u@nitsc \s@egsc \d@sc} + \realmult \u@nitsc \s@egsc \d@sc} \def\relunitscale #1 {\realmult {#1}\u@nitsc \u@nitsc -\realmult \u@nitsc \s@egsc \d@sc} + \realmult \u@nitsc \s@egsc \d@sc} \def\setsegscale #1 {\edef\s@egsc {#1}% -\realmult \u@nitsc \s@egsc \d@sc} + \realmult \u@nitsc \s@egsc \d@sc} \def\relsegscale #1 {\realmult {#1}\s@egsc \s@egsc -\realmult \u@nitsc \s@egsc \d@sc} + \realmult \u@nitsc \s@egsc \d@sc} + +% ===== Drawing segments +% The position is restored after a segment. +% Segments use TeX grouping on the TeX side and gsave/grestore on the +% PostScript side to keep changes local. On the TeX side segments have +% (0 0) as the initial point, while the PostScript side sees no scale +% changes or translations. \def\bsegment {\ifp@ath -\f@lushbs -\f@lushmove -\fi -\begingroup -\x@segoffpix=\x@pix -\y@segoffpix=\y@pix -\setsegscale 1 -\global\advance \d@bs by 1\relax} + \f@lushbs + \f@lushmove + \fi + \begingroup + \x@segoffpix=\x@pix + \y@segoffpix=\y@pix + \setsegscale 1 + \global\advance \d@bs by 1\relax} \def\esegment {\endgroup -\ifnum \d@bs=0 -\writetx {es}% -\else -\global\advance \d@bs by -1 -\fi} + \ifnum \d@bs=0 + \writetx {es}% + \else + \global\advance \d@bs by -1 + \fi} + +% Save a position +% Save each coordinate as the macro "*name". The macro is defined to +% be the pixel coordinate value. \def\savecurrpos (#1 #2){\getsympos (#1 #2)\a@rgx\a@rgy -\s@etcsn \a@rgx {\the\x@pix}% -\s@etcsn \a@rgy {\the\y@pix}} + \s@etcsn \a@rgx {\the\x@pix}% + \s@etcsn \a@rgy {\the\y@pix}} \def\savepos (#1 #2)(#3 #4){\getpos (#1 #2)\a@rgx\a@rgy -\coordtopix \a@rgx \t@pixa -\advance \t@pixa by \x@segoffpix -\coordtopix \a@rgy \t@pixb -\advance \t@pixb by \y@segoffpix -\getsympos (#3 #4)\a@rgx\a@rgy -\s@etcsn \a@rgx {\the\t@pixa}% -\s@etcsn \a@rgy {\the\t@pixb}} + \coordtopix \a@rgx \t@pixa + \advance \t@pixa by \x@segoffpix + \coordtopix \a@rgy \t@pixb + \advance \t@pixb by \y@segoffpix + \getsympos (#3 #4)\a@rgx\a@rgy + \s@etcsn \a@rgx {\the\t@pixa}% + \s@etcsn \a@rgy {\the\t@pixb}} + +% ===== Line parameters +% The following parameters apply to subsequent lines. Each of these +% commands invokes a stroke to draw the previous line segments, +% establishes the current point and then changes the line parameter. +% The parameters are kept local by the PostScript gsave/grestore +% mechanism. We use \writetx here, instead of \writeps, since we +% do not want to flush any moves. \def\linewd #1 {\coordtopix {#1}\t@pixa -\f@lushbs -\writetx {\the\t@pixa\space sl}} + \f@lushbs + \writetx {\the\t@pixa\space sl}} \def\setgray #1 {\f@lushbs -\writetx {#1 sg}} + \writetx {#1 sg}} \def\lpatt (#1){\listtopix (#1)\p@ixlist -\f@lushbs -\writetx {[\p@ixlist] sd}} + \f@lushbs + \writetx {[\p@ixlist] sd}} + +% ===== Line drawing +% PostScript uses the concept of a path consisting of line segments. +% In this interface to PostScript, paths are continuous across the +% beginning of segments. Paths terminate at the end of a segment with +% an implicit move. In addition, paths are both terminated and started +% with a move. There is a current point at all times, starting with +% initial position (0,0). \def\lvec (#1 #2){\getpos (#1 #2)\a@rgx\a@rgy -\s@etpospix \a@rgx \a@rgy -\writeps {\the\x@pix\space \the\y@pix\space lv}} + \s@etpospix \a@rgx \a@rgy + \writeps {\the\x@pix\space \the\y@pix\space lv}} \def\rlvec (#1 #2){\getpos (#1 #2)\a@rgx\a@rgy -\r@elpospix \a@rgx \a@rgy -\writeps {\the\x@pix\space \the\y@pix\space lv}} + \r@elpospix \a@rgx \a@rgy + \writeps {\the\x@pix\space \the\y@pix\space lv}} \def\move (#1 #2){\getpos (#1 #2)\a@rgx\a@rgy -\s@etpospix \a@rgx \a@rgy -\s@avemove \x@pix \y@pix} + \s@etpospix \a@rgx \a@rgy + \s@avemove \x@pix \y@pix} \def\rmove (#1 #2){\getpos (#1 #2)\a@rgx\a@rgy -\r@elpospix \a@rgx \a@rgy -\s@avemove \x@pix \y@pix} + \r@elpospix \a@rgx \a@rgy + \s@avemove \x@pix \y@pix} + +% ===== Circles, ellipses and arcs +% Note that arcs do not update the size of the drawing. +% \lcir, stroked circle +% r:#1 - radius +% \fcir, filled circle +% f:#1 - fill gray level, 0 is black, 1 is white +% r:#2 - radius +% \ellip, stroked ellipse +% rx:#1 - x radius +% ry:#2 - y radius +% \fellip, filled ellipse +% f:#1 - fill gray level, 0 is black, 1 is white +% rx:#1 - x radius +% ry:#2 - y radius +% \larc, stroked counterclockwise arc, with the present position being +% the center of the arc. Only the arc is drawn (not the line +% joining the center to the beginning of the arc) +% r:#1 - radius +% sd:#2 - start angle (degrees) +% ed:#3 - end angle (degrees) \def\lcir r:#1 {\coordtopix {#1}\t@pixa -\writeps {\the\t@pixa\space cr}% -\r@elupd \t@pixa \t@pixa -\r@elupd {-\t@pixa}{-\t@pixa}} + \writeps {\the\t@pixa\space cr}% + \r@elupd \t@pixa \t@pixa + \r@elupd {-\t@pixa}{-\t@pixa}} \def\fcir f:#1 r:#2 {\coordtopix {#2}\t@pixa -\writeps {\the\t@pixa\space #1 fc}% -\r@elupd \t@pixa \t@pixa -\r@elupd {-\t@pixa}{-\t@pixa}} + \writeps {\the\t@pixa\space #1 fc}% + \r@elupd \t@pixa \t@pixa + \r@elupd {-\t@pixa}{-\t@pixa}} \def\lellip rx:#1 ry:#2 {\coordtopix {#1}\t@pixa -\coordtopix {#2}\t@pixb -\writeps {\the\t@pixa\space \the\t@pixb\space el}% -\r@elupd \t@pixa \t@pixb -\r@elupd {-\t@pixa}{-\t@pixb}} + \coordtopix {#2}\t@pixb + \writeps {\the\t@pixa\space \the\t@pixb\space el}% + \r@elupd \t@pixa \t@pixb + \r@elupd {-\t@pixa}{-\t@pixb}} \def\fellip f:#1 rx:#2 ry:#3 {\coordtopix {#2}\t@pixa -\coordtopix {#3}\t@pixb -\writeps {\the\t@pixa\space \the\t@pixb\space #1 fe}% -\r@elupd \t@pixa \t@pixb -\r@elupd {-\t@pixa}{-\t@pixb}} + \coordtopix {#3}\t@pixb + \writeps {\the\t@pixa\space \the\t@pixb\space #1 fe}% + \r@elupd \t@pixa \t@pixb + \r@elupd {-\t@pixa}{-\t@pixb}} \def\larc r:#1 sd:#2 ed:#3 {\coordtopix {#1}\t@pixa -\writeps {\the\t@pixa\space #2 #3 ar}} -\def\ifill f:#1 {\writeps {#1 fl}} -\def\lfill f:#1 {\writeps {#1 fp}} + \writeps {\the\t@pixa\space #2 #3 ar}} + +% ===== Fill commands +% The form here completes a path with a closepath, applies the fill, +% starts a newpath and moves to the current point. The gray level has +% 0 as black and 1 as white. The current path is terminated. + +\def\ifill f:#1 {\writeps {#1 fl}} % Fill only +\def\lfill f:#1 {\writeps {#1 fp}} % Stroke and fill + +% ===== Text +% TeX text superimposed on the drawing +% \htext (x y){text} or \htext {text} +% \vtext (x y){text} or \vtext {text} +% \rtext td:angle (x y){text} or \rtext td:angle {text} +% \textref h:#1 v:#2 + +% The TeX text (or whatever) is placed in an \hbox. The box is rotated +% for vertical text. The text is placed on the drawing at the specified +% location (coordinates specified) or the current location (coordinates +% not specified). The text reference point is placed at that location. +% For the purposes of determining the drawing size, the text box is of +% zero size. + +% Horizontal text +% Check if the argument starts with a left parenthesis \def\htext #1{\def\testit {#1}% -\ifx \testit\l@paren -\let\next=\h@move -\else -\let\next=\h@text -\fi -\next {#1}} + \ifx \testit\l@paren + \let\next=\h@move + \else + \let\next=\h@text + \fi + \next {#1}} + +% Rotated text \def\rtext td:#1 #2{\def\testit {#2}% -\ifx \testit\l@paren -\let\next=\r@move -\else -\let\next=\r@text -\fi -\next td:#1 {#2}} + \ifx \testit\l@paren + \let\next=\r@move + \else + \let\next=\r@text + \fi + \next td:#1 {#2}} + +% Vertical text \def\vtext {\rtext td:90 } + +% Text reference point +% h:#1 text horizontal reference point - L, C or R +% v:#2 text vertical reference point - T, C or B \def\textref h:#1 v:#2 {\ifx #1R% -\edef\l@stuff {\hss}\edef\r@stuff {}% -\else -\ifx #1C% -\edef\l@stuff {\hss}\edef\r@stuff {\hss}% -\else -\edef\l@stuff {}\edef\r@stuff {\hss}% -\fi -\fi -\ifx #2T% -\edef\t@stuff {}\edef\b@stuff {\vss}% -\else -\ifx #2C% -\edef\t@stuff {\vss}\edef\b@stuff {\vss}% -\else -\edef\t@stuff {\vss}\edef\b@stuff {}% -\fi -\fi} + \edef\l@stuff {\hss}\edef\r@stuff {}% + \else + \ifx #1C% + \edef\l@stuff {\hss}\edef\r@stuff {\hss}% + \else % default L + \edef\l@stuff {}\edef\r@stuff {\hss}% + \fi + \fi + \ifx #2T% + \edef\t@stuff {}\edef\b@stuff {\vss}% + \else + \ifx #2C% + \edef\t@stuff {\vss}\edef\b@stuff {\vss}% + \else % default B + \edef\t@stuff {\vss}\edef\b@stuff {}% + \fi + \fi} + +% ===== Arrow vectors \def\avec (#1 #2){\getpos (#1 #2)\a@rgx\a@rgy -\s@etpospix \a@rgx \a@rgy -\writeps {\the\x@pix\space \the\y@pix\space (\a@type) -\the\a@lenpix\space \the\a@widpix\space av}} + \s@etpospix \a@rgx \a@rgy + \writeps {\the\x@pix\space \the\y@pix\space (\a@type) % + \the\a@lenpix\space \the\a@widpix\space av}} + \def\ravec (#1 #2){\getpos (#1 #2)\a@rgx\a@rgy -\r@elpospix \a@rgx \a@rgy -\writeps {\the\x@pix\space \the\y@pix\space (\a@type) -\the\a@lenpix\space \the\a@widpix\space av}} + \r@elpospix \a@rgx \a@rgy + \writeps {\the\x@pix\space \the\y@pix\space (\a@type) % + \the\a@lenpix\space \the\a@widpix\space av}} + +% Arrowhead size +% l:#1 - length of the arrowhead +% w:#2 - width of the base of the arrowhead \def\arrowheadsize l:#1 w:#2 {\coordtopix{#1}\a@lenpix -\coordtopix{#2}\a@widpix} + \coordtopix{#2}\a@widpix} +% Arrowhead type +% t:#1 - arrowhead type, F filled triangle (using current gray level) +% T empty closed triangle +% W white filled triangle +% V Vee shape, at the end of the vector +% H (or other character) Vee shape, vector stops +% short of the Vee \def\arrowheadtype t:#1 {\edef\a@type{#1}} + +% ===== Bezier curve +% The initial point is assumed to be the current point. Only the last +% coordinate affects the size of the plot. \def\clvec (#1 #2)(#3 #4)(#5 #6)% -{\getpos (#1 #2)\a@rgx\a@rgy -\coordtopix \a@rgx\t@pixa -\advance \t@pixa by \x@segoffpix -\coordtopix \a@rgy\t@pixb -\advance \t@pixb by \y@segoffpix -\getpos (#3 #4)\a@rgx\a@rgy -\coordtopix \a@rgx\t@pixc -\advance \t@pixc by \x@segoffpix -\coordtopix \a@rgy\t@pixd -\advance \t@pixd by \y@segoffpix -\getpos (#5 #6)\a@rgx\a@rgy -\s@etpospix \a@rgx \a@rgy -\writeps {\the\t@pixa\space \the\t@pixb\space -\the\t@pixc\space \the\t@pixd\space -\the\x@pix\space \the\y@pix\space cv}} + {\getpos (#1 #2)\a@rgx\a@rgy + \coordtopix \a@rgx\t@pixa + \advance \t@pixa by \x@segoffpix + \coordtopix \a@rgy\t@pixb + \advance \t@pixb by \y@segoffpix + \getpos (#3 #4)\a@rgx\a@rgy + \coordtopix \a@rgx\t@pixc + \advance \t@pixc by \x@segoffpix + \coordtopix \a@rgy\t@pixd + \advance \t@pixd by \y@segoffpix + \getpos (#5 #6)\a@rgx\a@rgy + \s@etpospix \a@rgx \a@rgy + \writeps {\the\t@pixa\space \the\t@pixb\space + \the\t@pixc\space \the\t@pixd\space + \the\x@pix\space \the\y@pix\space cv}} + +% ===== Draw the bounding box \def\drawbb {\bsegment -\drawdim bp -\linewd 0.24 -\setunitscale {\p@sfactor} -\writeps {\the\xminpix\space \the\yminpix\space mv}% -\writeps {\the\xminpix\space \the\ymaxpix\space lv}% -\writeps {\the\xmaxpix\space \the\ymaxpix\space lv}% -\writeps {\the\xmaxpix\space \the\yminpix\space lv}% -\writeps {\the\xminpix\space \the\yminpix\space lv}% -\esegment} + \drawdim bp + \linewd 0.24 % line width 1/300 inch = 0.24 bp + \setunitscale {\p@sfactor} + \writeps {\the\xminpix\space \the\yminpix\space mv}% + \writeps {\the\xminpix\space \the\ymaxpix\space lv}% + \writeps {\the\xmaxpix\space \the\ymaxpix\space lv}% + \writeps {\the\xmaxpix\space \the\yminpix\space lv}% + \writeps {\the\xminpix\space \the\yminpix\space lv}% + \esegment} + + +% =============================================================== +% ===== Utility macros used by TeXdraw ========================== + +% ===== Decode coordinates +% Get coordinates +% This macro is used to get two arguments separated by a blank, with +% possible leading and trailing blanks. Symbolic coordinates are +% converted to user coordinates. +% (#1 #2) - coordinates +% #3 - macro name to receive the x-coordinate value +% #4 - macro name to receive the y-coordinate value \def\getpos (#1 #2)#3#4{\g@etargxy #1 #2 {} \\#3#4% -\c@heckast #3% -\ifa@st -\g@etsympix #3\t@pixa -\advance \t@pixa by -\x@segoffpix -\pixtocoord \t@pixa #3% -\fi -\c@heckast #4% -\ifa@st -\g@etsympix #4\t@pixa -\advance \t@pixa by -\y@segoffpix -\pixtocoord \t@pixa #4% -\fi} + \c@heckast #3% + \ifa@st + \g@etsympix #3\t@pixa + \advance \t@pixa by -\x@segoffpix + \pixtocoord \t@pixa #3% + \fi + \c@heckast #4% + \ifa@st + \g@etsympix #4\t@pixa + \advance \t@pixa by -\y@segoffpix + \pixtocoord \t@pixa #4% + \fi} + +% Get symbolic coordinate names +% (#1 #2) - symbolic coordinates +% #3 - macro name to receive the symbolic x coordinate name +% #4 - macro name to receive the symbolic y coordinate name \def\getsympos (#1 #2)#3#4{\g@etargxy #1 #2 {} \\#3#4% -\c@heckast #3% -\ifa@st \else -\t@xderror {TeXdraw: invalid symbolic coordinate}% -\fi -\c@heckast #4% -\ifa@st \else -\t@xderror {TeXdraw: invalid symbolic coordinate}% -\fi} + \c@heckast #3% + \ifa@st \else + \t@xderror {TeXdraw: invalid symbolic coordinate}% + \fi + \c@heckast #4% + \ifa@st \else + \t@xderror {TeXdraw: invalid symbolic coordinate}% + \fi} + +% ===== Convert a list of values to pixel values +% (#1) - blank separated list of values in user coordinates +% #2 - macro name to receive the blank separated list of pixel values \def\listtopix (#1)#2{\def #2{}% -\edef\l@ist {#1 }% -\m@oretrue -\loop -\expandafter\g@etitem \l@ist \\\a@rgx\l@ist -\a@pppix \a@rgx #2% -\ifx \l@ist\empty -\m@orefalse -\fi -\ifm@ore -\repeat} + \edef\l@ist {#1 }% % append a blank to the string + \m@oretrue + \loop + \expandafter\g@etitem \l@ist \\\a@rgx\l@ist + \a@pppix \a@rgx #2% + \ifx \l@ist\empty + \m@orefalse + \fi + \ifm@ore + \repeat} + +% ===== Real multiplication +% This function uses the property that a box dimension may be scaled by +% a real value. The values are converted to dimensions in units of pt. +% This choice gives us a reasonable dynamic range. The final step is to +% clean off the "pt" on the resulting dimension. Note that these are fixed +% point operations with each operand represented to an accuracy of about 5 +% decimal places. + +% Note we must use magnified points not "true" points, since the answer is +% expressed in magnified points. The result will be calculated in the same +% manner no matter what the magnification is. +% #1 and #2 are multiplicands +% #3 macro name to capture the real result \def\realmult #1#2#3{\dimen0=#1pt -\dimen2=#2\dimen0 -\edef #3{\expandafter\c@lean\the\dimen2}} + \dimen2=#2\dimen0 + \edef #3{\expandafter\c@lean\the\dimen2}} + +% ===== Divide integers, real result +% #1 integer numerator value +% #2 integer denominator (divisor) value +% #3 macro name to capture the real result \def\intdiv #1#2#3{\t@counta=#1 -\t@countb=#2 -\ifnum \t@countb<0 -\t@counta=-\t@counta -\t@countb=-\t@countb -\fi -\t@countd=1 -\ifnum \t@counta<0 -\t@counta=-\t@counta -\t@countd=-1 -\fi -\t@countc=\t@counta \divide \t@countc by \t@countb -\t@counte=\t@countc \multiply \t@counte by \t@countb -\advance \t@counta by -\t@counte -\t@counte=-1 -\loop -\advance \t@counte by 1 -\ifnum \t@counte<16 -\multiply \t@countc by 2 -\multiply \t@counta by 2 -\ifnum \t@counta<\t@countb \else -\advance \t@countc by 1 -\advance \t@counta by -\t@countb -\fi -\repeat -\divide \t@countb by 2 -\ifnum \t@counta<\t@countb -\advance \t@countc by 1 -\fi -\ifnum \t@countd<0 -\t@countc=-\t@countc -\fi -\dimen0=\t@countc sp -\edef #3{\expandafter\c@lean\the\dimen0}} + \t@countb=#2 +% Limitations: #1 must be negatable, i.e. it must not be the largest +% magnitude negative number +% #2 must be able to be multiplied by 2 without overflow +% Calculate a*65536/b where the factor 65536 converts from pt to sp. +% This operation can also be interpretated as an extended precision +% numerator divided by the denominator. The scheme used is basically a +% long division, except that it is bootstrapped by an integer divide. +% The computations are carried out with positive numerator and +% denominator, with the appropriate restoration of sign at the end. +% \t@counta == remainder, r, initially set to a +% \t@countb == denominator, b +% \t@countc == quotient, q +% \t@countd == +1, a and b have the same sign +% -1, a and b have opposite signs +% \t@counte == temporary register + \ifnum \t@countb<0 + \t@counta=-\t@counta + \t@countb=-\t@countb + \fi + \t@countd=1 % record the sign + \ifnum \t@counta<0 + \t@counta=-\t@counta + \t@countd=-1 + \fi +% % q=a/b, r=a-q*b + \t@countc=\t@counta \divide \t@countc by \t@countb + \t@counte=\t@countc \multiply \t@counte by \t@countb + \advance \t@counta by -\t@counte + \t@counte=-1 + \loop + \advance \t@counte by 1 + \ifnum \t@counte<16 % loop 16 times + \multiply \t@countc by 2 % q=2q + \multiply \t@counta by 2 % r=2r + \ifnum \t@counta<\t@countb \else % if ( r >= b ) + \advance \t@countc by 1 % q=q+1 + \advance \t@counta by -\t@countb % r=r-b + \fi + \repeat + \divide \t@countb by 2 % rounding + \ifnum \t@counta<\t@countb % if ( r >= b/2 ) q=q+1 + \advance \t@countc by 1 + \fi + \ifnum \t@countd<0 % restore the sign + \t@countc=-\t@countc + \fi + \dimen0=\t@countc sp % express as a dimension + \edef #3{\expandafter\c@lean\the\dimen0}} + +% =============================================================== +% ===== Internal TeXdraw macros ================================= + +% ===== Macros for converting between dimensions and units +% Convert drawing units (coordinate value, scaled by the unit scale and +% segment scale) to pixels. We use rounding to get more accurate results. +% #1 dimension in drawing units +% #2 count in pixels (returned into a count) \def\coordtopix #1#2{\dimen0=#1\d@dim -\dimen2=\d@sc\dimen0 -\t@counta=\dimen2 -\t@countb=\s@ppix -\divide \t@countb by 2 -\ifnum \t@counta<0 -\advance \t@counta by -\t@countb -\else -\advance \t@counta by \t@countb -\fi -\divide \t@counta by \s@ppix -#2=\t@counta} + \dimen2=\d@sc\dimen0 + \t@counta=\dimen2 % scaled dimension in sp + \t@countb=\s@ppix + \divide \t@countb by 2 + \ifnum \t@counta<0 % rounding + \advance \t@counta by -\t@countb + \else + \advance \t@counta by \t@countb + \fi + \divide \t@counta by \s@ppix + #2=\t@counta} + +% Convert from absolute pixels to relative scaled coordinates +% #1 - input integer pixel value +% #2 - macro name to receive the character string corresponding to the +% floating point coordinate value \def\pixtocoord #1#2{\t@counta=#1% -\multiply \t@counta by \s@ppix -\dimen0=\d@sc\d@dim -\t@countb=\dimen0 -\intdiv \t@counta \t@countb #2} + \multiply \t@counta by \s@ppix + \dimen0=\d@sc\d@dim + \t@countb=\dimen0 + \intdiv \t@counta \t@countb #2} + +% Convert pixels to TeX dimensions. +% #1 - input integer pixel value +% #2 - returned dimension (returned into a dimension register) \def\pixtodim #1#2{\t@countb=#1% -\multiply \t@countb by \s@ppix -#2=\t@countb sp\relax} + \multiply \t@countb by \s@ppix + #2=\t@countb sp\relax} + +% Convert pixels to (integer) bp units +% #1 - input pixel value +% #2 - integer value, returned as a macro definition \def\pixtobp #1#2{\dimen0=\p@sfactor pt -\t@counta=\dimen0 -\multiply \t@counta by #1% -\ifnum \t@counta < 0 -\advance \t@counta by -32768 -\else -\advance \t@counta by 32768 -\fi -\divide \t@counta by 65536 -\edef #2{\the\t@counta}} -\newcount\t@counta \newcount\t@countb + \t@counta=\dimen0 + \multiply \t@counta by #1% + \ifnum \t@counta < 0 % rounding + \advance \t@counta by -32768 + \else + \advance \t@counta by 32768 + \fi + \divide \t@counta by 65536 + \edef #2{\the\t@counta}} + +% ===== Allocations for registers and counts +% == Temporary count registers +\newcount\t@counta \newcount\t@countb % Use at lowest levels \newcount\t@countc \newcount\t@countd \newcount\t@counte -\newcount\t@pixa \newcount\t@pixb +\newcount\t@pixa \newcount\t@pixb % Use for pixel values \newcount\t@pixc \newcount\t@pixd + +% == Temporary dimension registers \newdimen\t@xpos \newdimen\t@ypos + +% == Position and parameter registers +% The minimum and maximum extent in the X and Y direction in pixel units +% (updated globally to reach outside segments) \newcount\xminpix \newcount\xmaxpix \newcount\yminpix \newcount\ymaxpix + +% == Arrowhead parameters \newcount\a@lenpix \newcount\a@widpix + +% == Absolute pixel positions \newcount\x@pix \newcount\y@pix \newcount\x@segoffpix \newcount\y@segoffpix \newcount\x@savepix \newcount\y@savepix -\newcount\s@ppix + +% == Conversion factor +\newcount\s@ppix % sp/pixel + +% == Pending segments count \newcount\d@bs + +% == Counter to form unique file names \newcount\t@xdnum \global\t@xdnum=0 + +% == TeXdraw box \newbox\t@xdbox + +% == Output stream number for the PostScript file \newwrite\drawfile + +% == \newif \newif\ifm@pending \newif\ifp@ath \newif\ifa@st \newif\ifm@ore \newif \ift@extonly \newif\ifp@osinit + +% == \newtoks \newtoks\everytexdraw + +% ===== Character definitions \def\l@paren{(} \def\a@st{*} + +% ===== Special character macros +% Need to be able to insert "%", "{" and "}" characters into the +% PostScript file. +% Define macros which have these characters with category "other". +% We will assume, that these characters have the standard meanings -- +% after all, we use comments and braces in this code. \catcode`\%=12 -\def\p@b {%!} \def\p@p {%%} + \def\p@b {%!} \def\p@p {%%} \catcode`\%=14 \catcode`\{=12 \catcode`\}=12 \catcode`\u=1 \catcode`\v=2 -\def\l@br u{v \def\r@br u}v + \def\l@br u{v \def\r@br u}v \catcode `\{=1 \catcode`\}=2 \catcode`\u=11 \catcode`\v=11 + +% ===== Pixel conversion factors +% The position is kept as an integer value (count). It is set to a +% resolution corresponding to 300 units/inch. We refer to them as pixels, +% but in fact the resolution is just that: movements are quantized to lie +% on a grid with that resolution. + +% Using pixel units which correspond to the actual resolution of the device +% has advantages in that all horizontal and vertical lines then will be +% drawn with the same line thickness. In addition the coordinates are +% then integer values (no decimal point or leading zeros) which leads +% to a more compact PostScript file. + +% The following macro sets the conversion from PostScript units (bp) to the +% integer units (pixels). The file inclusion \special environment in the +% PostScript driver restores the context to default PostScript values +% (bp or 72/in and origin in the lower lefthand corner). A scaling value +% of 0.24 converts to 300/inch. Note that the PostScript commands written +% to the temporary PostScript file do not depend on the TeX magnification +% in effect. Magnification should be handled by the dvi to PostScript +% driver at the time that the file is included in the output. + +% Calculate the conversion factors +% Let s@ppix = sp/pixel = u / p, where u = sp/unit and p = pix/unit (both +% integer values). +% We calculate s@ppix as +% s@ppix = [ (u+0.5p)/p ] +% We also calculate the PostScript scale factor bp/pixel +% Let b = sp/bp. We want p@sfactor = s@ppix/b. For 300 pixels/inch, this +% gives p@sfactor=0.24. Using rounding +% p@sfactor = [ (s@ppix+0.5b)/b ] . +% To carry out the arithmetic, we will operate in sp units (integers) and +% generate the answer in pt units (multiplying by sp/pt). This result will +% expressed as a character string representing a real number after the "pt" +% designator is stripped off. + {\catcode`\p=12 \catcode`\t=12 -\gdef\c@lean #1pt{#1}} + \gdef\c@lean #1pt{#1}} + \def\sppix#1/#2 {\dimen0=1#2 \s@ppix=\dimen0 -\t@counta=#1% -\divide \t@counta by 2 -\advance \s@ppix by \t@counta -\divide \s@ppix by #1% -\t@counta=\s@ppix -\multiply \t@counta by 65536 -\advance \t@counta by 32891 -\divide \t@counta by 65782 -\dimen0=\t@counta sp -\edef\p@sfactor {\expandafter\c@lean\the\dimen0}} + \t@counta=#1% + \divide \t@counta by 2 + \advance \s@ppix by \t@counta + \divide \s@ppix by #1% % \s@ppix available + \t@counta=\s@ppix + \multiply \t@counta by 65536 % 1 pt = 65536 sp + \advance \t@counta by 32891 % 0.5 bp = 32890.88 sp + \divide \t@counta by 65782 % 1 bp = 65781.76 sp + \dimen0=\t@counta sp + \edef\p@sfactor {\expandafter\c@lean\the\dimen0}} + +% ===== Low level coordinate decoding macros +% Get two values, separated by a blank +% Invoke as \g@etargxy <stuff> {} \\\ma\mb \def\g@etargxy #1 #2 #3 #4\\#5#6{\def #5{#1}% -\ifx #5\empty -\g@etargxy #2 #3 #4 \\#5#6% leading blank -\else -\def #6{#2}% -\def\next {#3}% -\ifx \next\empty \else -\t@xderror {TeXdraw: invalid coordinate}% -\fi -\fi} + \ifx #5\empty + \g@etargxy #2 #3 #4 \\#5#6% leading blank + \else + \def #6{#2}% + \def\next {#3}% + \ifx \next\empty \else + \t@xderror {TeXdraw: invalid coordinate}% + \fi + \fi} + +% Check for a leading asterisk +% Sets \a@stfalse or \a@sttrue, test with \ifa@st \def\c@heckast #1{\expandafter -\c@heckastll #1\\} + \c@heckastll #1\\} \def\c@heckastll #1#2\\{\def\testit {#1}% -\ifx \testit\a@st -\a@sttrue -\else -\a@stfalse -\fi} + \ifx \testit\a@st + \a@sttrue + \else + \a@stfalse + \fi} + +% Decode a symbolic coordinate +% Pixel value returned to a count \def\g@etsympix #1#2{\expandafter -\ifx \csname #1\endcsname \relax -\t@xderror {TeXdraw: undefined symbolic coordinate}% -\fi -#2=\csname #1\endcsname} + \ifx \csname #1\endcsname \relax + \t@xderror {TeXdraw: undefined symbolic coordinate}% + \fi + #2=\csname #1\endcsname} + +% Set a macro named #1 to have value #2 \def\s@etcsn #1#2{\expandafter -\xdef\csname#1\endcsname {#2}} + \xdef\csname#1\endcsname {#2}} + +% ===== Low level list decoding macros +% Pick off the first item -> #3, rest of string -> #4 \def\g@etitem #1 #2\\#3#4{\edef #4{#2}\edef #3{#1}} \def\a@pppix #1#2{\edef\next {#1}% -\ifx \next\empty \else -\coordtopix {#1}\t@pixa -\ifx #2\empty -\edef #2{\the\t@pixa}% -\else -\edef #2{#2 \the\t@pixa}% -\fi -\fi} + \ifx \next\empty \else + \coordtopix {#1}\t@pixa + \ifx #2\empty + \edef #2{\the\t@pixa}% + \else + \edef #2{#2 \the\t@pixa}% + \fi + \fi} + +% ===== Macros for updating the position +% Calculate the position in pixels and update the maximum excursions \def\s@etpospix #1#2{\coordtopix {#1}\x@pix -\advance \x@pix by \x@segoffpix -\coordtopix {#2}\y@pix -\advance \y@pix by \y@segoffpix -\u@pdateminmax \x@pix \y@pix} + \advance \x@pix by \x@segoffpix + \coordtopix {#2}\y@pix + \advance \y@pix by \y@segoffpix + \u@pdateminmax \x@pix \y@pix} + \def\r@elpospix #1#2{\coordtopix {#1}\t@pixa -\advance \x@pix by \t@pixa -\coordtopix {#2}\t@pixa -\advance \y@pix by \t@pixa -\u@pdateminmax \x@pix \y@pix} + \advance \x@pix by \t@pixa + \coordtopix {#2}\t@pixa + \advance \y@pix by \t@pixa + \u@pdateminmax \x@pix \y@pix} + \def\r@elupd #1#2{\t@counta=\x@pix -\advance\t@counta by #1% -\t@countb=\y@pix -\advance\t@countb by #2% -\u@pdateminmax \t@counta \t@countb} + \advance\t@counta by #1% + \t@countb=\y@pix + \advance\t@countb by #2% + \u@pdateminmax \t@counta \t@countb} + \def\u@pdateminmax #1#2{\ifnum #1>\xmaxpix -\global\xmaxpix=#1% -\fi -\ifnum #1<\xminpix -\global\xminpix=#1% -\fi -\ifnum #2>\ymaxpix -\global\ymaxpix=#2% -\fi -\ifnum #2<\yminpix -\global\yminpix=#2% -\fi} + \global\xmaxpix=#1% + \fi + \ifnum #1<\xminpix + \global\xminpix=#1% + \fi + \ifnum #2>\ymaxpix + \global\ymaxpix=#2% + \fi + \ifnum #2<\yminpix + \global\yminpix=#2% + \fi} + +% ===== Save moves / flush moves +% A TeXdraw segment which generates only TeX text uses only move, begin +% segment and end segment commands. The goal is to avoid writing out +% empty segments for such cases. To this end, moves are held back and +% only written out if necessary to set the position or terminate a path. +% Also in this way, a TeXdraw drawing which generates only TeX text will +% not generate a PostScript file. + +% Two flags are used. Both flags are local to a segment. +% - move pending: Set when a move has been invoked but the move command +% has not been written out to the PostScript file +% - path in progress: Set when a PostScript path has been started but the +% path has not been terminated and stroked. +% (1) Moves are kept back. Using TeX's groups, a local flag and local +% position registers are used to keep track of whether the latest +% move applicable to a given segment has been written out or not. In +% effect there is a stack of pending moves, one for each level of +% segment nesting. +% (2) At the beginning of a segment, if a PS path is in progress and a +% a move is pending, the move is written out, terminating the path +% and stroking the path. This is done to ensure that the path is +% stroked before lines and/or fills are executed in the segment. +% (3) At the beginning of a segment, if a PS path is not in progress, +% any pending moves are kept back. Effectively, the move will be +% transferred into the segment. It will be written out only when +% the position needs to be updated for some other command. Such +% moves which are transferred into segments may have to be repeated +% outside the segment. The move pending flag will be restored to +% the value outside the segment on exit from the segment. +% (4) A begin segment command is not written out, but instead a global +% segment backlog counter is incremented. The backlog of begin +% segment commands is written out when a drawing command is +% encountered. +% The effect of the above on the TeXdraw commands is as follows. +% (a) move: +% - set the current position +% - record the position of the saved move +% - set the move pending flag +% (b) begin segment: +% - if a path is in progress +% - if a move is pending +% - if there is a backlog of segments +% - write out enough begin segments to clear the backlog +% - write out the pending move +% - reset the move pending flag (local to the containing segment, +% but affects inferior segments) +% - reset the path in progress flag +% - increment the segment backlog counter +% - begin a group +% (c) end segment: +% - end a group +% - if there is no backlog of segments +% - write an end segment command +% - if there is a backlog of segments +% - decrement the backlog counter, thereby omitting an empty +% empty segment. +% - the move pending flag and path in progress flag are automatically +% restored on leaving the TeX group +% (d) text: +% - create a text box +% (e) line parameters: +% - if there is a backlog of segments +% - write out enough begin segments to clear the backlog +% - clear the path in progress flag +% - write the PS command changing the line parameter +% (f) other drawing commands: +% - update the current position +% - if there is a backlog of segments +% - write out enough begin segments to clear the backlog +% - if there is a pending move +% - write out the pending move +% - reset the move pending flag (local to this segment, but affects +% inferior segments) +% - set the path in progress flag +% - write the drawing command +% Notes: +% (1) The es PS command strokes the path at the end of a segment to +% ensure that the correct line parameters are used for the segment. +% The path before the corresponding bs command is restored and +% continued. +% (2) The \f@lushbs and \f@lushmove commands must be invoked before each +% drawing command written to the PS file. The macro \writeps includes +% these operations. + +% Another awkward business has to do with initialization. We want a +% default (0 0) initial position so that the user can draw vectors +% immediately. However, if the user specifies another move before +% beginning to draw, that position should be the initial position. The +% importance of this initial position is that the determination of the +% maximum excursion must take this value into account. We handle the +% initialization in the \s@avemove and \f@lushmove macros. The macro +% \ifp@osinit indicates whether the next move should be captured as the +% initial values for \xminpix, \yminpix, \xmaxpix, and \ymaxpix. However, +% if a \f@lushmove is invoked, then we assume that the appropriate initial +% values has already been set. The "mv" command in PostScript is defined +% to stroke the current path (if any) and move to the pixel coordinates +% specified. + +% Note that \m@pendingtrue and \m@pendingfalse define the flag locally. +% In addition, \x@savepix and \y@savepix are local variables. We make +% use of the fact that the values of the flag and positions propagate +% down to inferior segments but not up to superior segments. This +% behaviour Is consistent with the gsave/grestore operation on the +% PostScript side. \def\s@avemove #1#2{\x@savepix=#1\y@savepix=#2% -\m@pendingtrue -\ifp@osinit \else -\global\p@osinittrue -\global\xminpix=\x@savepix \global\yminpix=\y@savepix -\global\xmaxpix=\x@savepix \global\ymaxpix=\y@savepix -\fi} + \m@pendingtrue + \ifp@osinit \else + \global\p@osinittrue + \global\xminpix=\x@savepix \global\yminpix=\y@savepix + \global\xmaxpix=\x@savepix \global\ymaxpix=\y@savepix + \fi} + \def\f@lushmove {\global\p@osinittrue -\ifm@pending -\writetx {\the\x@savepix\space \the\y@savepix\space mv}% -\m@pendingfalse -\p@athfalse -\fi} + \ifm@pending + \writetx {\the\x@savepix\space \the\y@savepix\space mv}% + \m@pendingfalse + \p@athfalse + \fi} + +% ===== Flush begin segment +% \f@lushbs flushes any saved up \bsegments. Some of these may be +% redundant, but we cannot know without looking ahead beyond the +% \esegment. \def\f@lushbs {\loop -\ifnum \d@bs>0 -\writetx {bs}% -\global\advance \d@bs by -1 -\repeat} + \ifnum \d@bs>0 + \writetx {bs}% + \global\advance \d@bs by -1 + \repeat} + +% ===== Internal text macros +% Horizontal text, use only 3 levels of box nesting here \def\h@move #1#2 #3)#4{\move (#2 #3)% -\h@text {#4}} + \h@text {#4}} \def\h@text #1{\pixtodim \x@pix \t@xpos -\pixtodim \y@pix \t@ypos -\vbox to 0pt{\normalbaselines -\t@stuff -\kern -\t@ypos -\hbox to 0pt{\l@stuff -\kern \t@xpos -\hbox {#1}% -\kern -\t@xpos -\r@stuff}% -\kern \t@ypos -\b@stuff\relax}} + \pixtodim \y@pix \t@ypos + \vbox to 0pt{\normalbaselines + \t@stuff + \kern -\t@ypos + \hbox to 0pt{\l@stuff + \kern \t@xpos + \hbox {#1}% + \kern -\t@xpos + \r@stuff}% + \kern \t@ypos + \b@stuff\relax}} + +% Rotated text +% Uses 5 levels of box nesting here (so that the text reference point +% is that <before> rotation). This was done so that the reference point +% definition makes sense with arbitrary angle rotation. The text is +% rotated with respect to the text reference point. The result is zero +% sized. These macros generate in-line PostScript. +% #1 - rotation angle in degrees +% #2 - text to be rotated \def\r@move td:#1 #2#3 #4)#5{\move (#3 #4)% -\r@text td:#1 {#5}} + \r@text td:#1 {#5}} \def\r@text td:#1 #2{\vbox to 0pt{\pixtodim \x@pix \t@xpos -\pixtodim \y@pix \t@ypos -\kern -\t@ypos -\hbox to 0pt{\kern \t@xpos -\rottxt {#1}{\z@sb {#2}}% -\hss}% -\vss}} + \pixtodim \y@pix \t@ypos + \kern -\t@ypos + \hbox to 0pt{\kern \t@xpos + \rottxt {#1}{\z@sb {#2}}% + \hss}% + \vss}} \def\z@sb #1{\vbox to 0pt{\normalbaselines -\t@stuff -\hbox to 0pt{\l@stuff \hbox {#1}\r@stuff}% -\b@stuff}} + \t@stuff + \hbox to 0pt{\l@stuff \hbox {#1}\r@stuff}% + \b@stuff}} + +% ===== Rotate text, in-line PostScript code \ifx \rotatebox\@undefined -\def\rottxt #1#2{\bgroup -\special {ps: gsave currentpoint currentpoint translate -#1\space neg rotate -neg exch neg exch translate}% -#2% -\special {ps: currentpoint grestore moveto}% -\egroup} + \def\rottxt #1#2{\bgroup + \special {ps: gsave currentpoint currentpoint translate + #1\space neg rotate + neg exch neg exch translate}% + #2% + \special {ps: currentpoint grestore moveto}% + \egroup} \else -\let\rottxt=\rotatebox + \let\rottxt=\rotatebox \fi + +% ===== Error message +% If not defined, use the plain TeX errmessage macro \ifx \t@xderror\@undefined -\let\t@xderror=\errmessage + \let\t@xderror=\errmessage \fi -\def\t@exdrawdef {\sppix 300/in -\drawdim in -\edef\u@nitsc {1}% -\setsegscale 1 -\arrowheadsize l:0.16 w:0.08 -\arrowheadtype t:T -\textref h:L v:B } + +% ===== Default values +% These are reset each time TeXdraw is invoked +\def\t@exdrawdef {\sppix 300/in % 300 pixels/inch + \drawdim in % drawing units are inches + \edef\u@nitsc {1}% % unit scale 1 (has to be set + % before invoking \setsegscale) + \setsegscale 1 % segment scale 1 + \arrowheadsize l:0.16 w:0.08 + \arrowheadtype t:T + \textref h:L v:B } + + +% =============================================================== +% ===== PostScript file macros ================================== + +% ===== Include the TeXdraw graphics +% The drawing in a box of appropriate size will be placed such that its +% lower left hand corner will be at the current TeX position. \ifx \includegraphics\@undefined -\def\t@xdinclude [#1,#2][#3,#4]#5{% -\begingroup -\message {<#5>}% -\leavevmode -\t@counta=-#1% -\t@countb=-#2% -\setbox0=\hbox{% -\special {PSfile="#5"\space -hoffset=\the\t@counta\space voffset=\the\t@countb}}% -\t@ypos=#4 bp% -\advance \t@ypos by -#2 bp% -\t@xpos=#3 bp% -\advance \t@xpos by -#1 bp% -\dp0=0pt \ht0=\t@ypos \wd0=\t@xpos -\box0% -\endgroup} + \def\t@xdinclude [#1,#2][#3,#4]#5{% + \begingroup % keep definitions local + \message {<#5>}% + \leavevmode + \t@counta=-#1% % integer bounding box coordinates + \t@countb=-#2% + \setbox0=\hbox{% + \special {PSfile="#5"\space + hoffset=\the\t@counta\space voffset=\the\t@countb}}% + \t@ypos=#4 bp% + \advance \t@ypos by -#2 bp% + \t@xpos=#3 bp% + \advance \t@xpos by -#1 bp% + \dp0=0pt \ht0=\t@ypos \wd0=\t@xpos + \box0% + \endgroup} \else -\let\t@xdinclude=\includegraphics + \let\t@xdinclude=\includegraphics \fi + +% ===== Write to the PostScript file +% Macro to write PostScript commands to the temporary PostScript file +% To decrease the size of the PostScript file, moves are kept back to +% allow redundant multiple moves to be removed. In addition empty gsave/ +% grestore pairs are not written. The PostScript file is not opened if +% TeXdraw has not generated any PostScript commands, i.e. it has produced +% only TeX text. +% \writeps : flushes the pending move to make sure things are positioned +% correctly and flushes pending begin segments before calling +% \writetx to write to the PostScript file +% \writetx : writes directly to the PostScript file. This version is used +% only for those commands which just change line parameters +% without drawing. This routine opens the file and writes the +% PS file header the first time it is called. +% \w@rps : lowest level direct write to the PostScript file \def\writeps #1{\f@lushbs -\f@lushmove -\p@athtrue -\writetx {#1}} + \f@lushmove + \p@athtrue + \writetx {#1}} \def\writetx #1{\ift@extonly -\global\t@extonlyfalse -\t@xdpsfn \p@sfile -\t@dropen \p@sfile -\fi -\w@rps {#1}} + \global\t@extonlyfalse + \t@xdpsfn \p@sfile + \t@dropen \p@sfile + \fi + \w@rps {#1}} \def\w@rps #1{\immediate\write\drawfile {#1}} + +% ===== Open a PostScript file +% Open a PostScript file, write the definitions used by TeXdraw. \def\t@xdpsfn #1{% -\global\advance \t@xdnum by 1 -\ifnum \t@xdnum<10 -\xdef #1{\jobname.ps\the\t@xdnum} -\else -\xdef #1{\jobname.p\the\t@xdnum} -\fi + \global\advance \t@xdnum by 1 + \ifnum \t@xdnum<10 + \xdef #1{\jobname.ps\the\t@xdnum} + \else + \xdef #1{\jobname.p\the\t@xdnum} + \fi } \def\t@dropen #1{% -\immediate\openout\drawfile=#1% -\w@rps {\p@b PS-Adobe-3.0 EPSF-3.0}% -\w@rps {\p@p BoundingBox: (atend)}% -\w@rps {\p@p Title: TeXdraw drawing: #1}% -\w@rps {\p@p Pages: 1}% -\w@rps {\p@p Creator: \TeXdrawId}% -\w@rps {\p@p CreationDate: \the\year/\the\month/\the\day}% -\w@rps {50 dict begin}% -\w@rps {/mv {stroke moveto} def}% -\w@rps {/lv {lineto} def}% -\w@rps {/st {currentpoint stroke moveto} def}% -\w@rps {/sl {st setlinewidth} def}% -\w@rps {/sd {st 0 setdash} def}% -\w@rps {/sg {st setgray} def}% -\w@rps {/bs {gsave} def /es {stroke grestore} def}% -\w@rps {/fl \l@br gsave setgray fill grestore}% -\w@rps { currentpoint newpath moveto\r@br\space def}% -\w@rps {/fp {gsave setgray fill grestore st} def}% -\w@rps {/cv {curveto} def}% -\w@rps {/cr \l@br gsave currentpoint newpath 3 -1 roll 0 360 arc}% -\w@rps { stroke grestore\r@br\space def}% -\w@rps {/fc \l@br gsave setgray currentpoint newpath}% -\w@rps { 3 -1 roll 0 360 arc fill grestore\r@br\space def}% -\w@rps {/ar {gsave currentpoint newpath 5 2 roll arc stroke grestore} def}% -\w@rps {/el \l@br gsave /svm matrix currentmatrix def}% -\w@rps { currentpoint translate scale newpath 0 0 1 0 360 arc}% -\w@rps { svm setmatrix stroke grestore\r@br\space def}% -\w@rps {/fe \l@br gsave setgray currentpoint translate scale newpath}% -\w@rps { 0 0 1 0 360 arc fill grestore\r@br\space def}% -\w@rps {/av \l@br /hhwid exch 2 div def /hlen exch def}% -\w@rps { /ah exch def /tipy exch def /tipx exch def}% -\w@rps { currentpoint /taily exch def /tailx exch def}% -\w@rps { /dx tipx tailx sub def /dy tipy taily sub def}% -\w@rps { /alen dx dx mul dy dy mul add sqrt def}% -\w@rps { /blen alen hlen sub def}% -\w@rps { gsave tailx taily translate dy dx atan rotate}% -\w@rps { (V) ah ne {blen 0 gt {blen 0 lineto} if} {alen 0 lineto} ifelse}% -\w@rps { stroke blen hhwid neg moveto alen 0 lineto blen hhwid lineto}% -\w@rps { (T) ah eq {closepath} if}% -\w@rps { (W) ah eq {gsave 1 setgray fill grestore closepath} if}% -\w@rps { (F) ah eq {fill} {stroke} ifelse}% -\w@rps { grestore tipx tipy moveto\r@br\space def}% -\w@rps {\p@sfactor\space \p@sfactor\space scale}% -\w@rps {1 setlinecap 1 setlinejoin}% -\w@rps {3 setlinewidth [] 0 setdash}% -\w@rps {0 0 moveto}% + \immediate\openout\drawfile=#1% + \w@rps {\p@b PS-Adobe-3.0 EPSF-3.0}% + \w@rps {\p@p BoundingBox: (atend)}% + \w@rps {\p@p Title: TeXdraw drawing: #1}% + \w@rps {\p@p Pages: 1}% + \w@rps {\p@p Creator: \TeXdrawId}% + \w@rps {\p@p CreationDate: \the\year/\the\month/\the\day}% + \w@rps {50 dict begin}% + \w@rps {/mv {stroke moveto} def}% + \w@rps {/lv {lineto} def}% + \w@rps {/st {currentpoint stroke moveto} def}% + \w@rps {/sl {st setlinewidth} def}% + \w@rps {/sd {st 0 setdash} def}% + \w@rps {/sg {st setgray} def}% + \w@rps {/bs {gsave} def /es {stroke grestore} def}% + \w@rps {/fl \l@br gsave setgray fill grestore}% + \w@rps { currentpoint newpath moveto\r@br\space def}% + \w@rps {/fp {gsave setgray fill grestore st} def}% + \w@rps {/cv {curveto} def}% + \w@rps {/cr \l@br gsave currentpoint newpath 3 -1 roll 0 360 arc}% + \w@rps { stroke grestore\r@br\space def}% + \w@rps {/fc \l@br gsave setgray currentpoint newpath}% + \w@rps { 3 -1 roll 0 360 arc fill grestore\r@br\space def}% + \w@rps {/ar {gsave currentpoint newpath 5 2 roll arc stroke grestore} def}% + \w@rps {/el \l@br gsave /svm matrix currentmatrix def}% + \w@rps { currentpoint translate scale newpath 0 0 1 0 360 arc}% + \w@rps { svm setmatrix stroke grestore\r@br\space def}% + \w@rps {/fe \l@br gsave setgray currentpoint translate scale newpath}% + \w@rps { 0 0 1 0 360 arc fill grestore\r@br\space def}% + \w@rps {/av \l@br /hhwid exch 2 div def /hlen exch def}% + \w@rps { /ah exch def /tipy exch def /tipx exch def}% + \w@rps { currentpoint /taily exch def /tailx exch def}% + \w@rps { /dx tipx tailx sub def /dy tipy taily sub def}% + \w@rps { /alen dx dx mul dy dy mul add sqrt def}% + \w@rps { /blen alen hlen sub def}% + \w@rps { gsave tailx taily translate dy dx atan rotate}% + \w@rps { (V) ah ne {blen 0 gt {blen 0 lineto} if} {alen 0 lineto} ifelse}% + \w@rps { stroke blen hhwid neg moveto alen 0 lineto blen hhwid lineto}% + \w@rps { (T) ah eq {closepath} if}% + \w@rps { (W) ah eq {gsave 1 setgray fill grestore closepath} if}% + \w@rps { (F) ah eq {fill} {stroke} ifelse}% + \w@rps { grestore tipx tipy moveto\r@br\space def}% + \w@rps {\p@sfactor\space \p@sfactor\space scale}% + \w@rps {1 setlinecap 1 setlinejoin}% + \w@rps {3 setlinewidth [] 0 setdash}% + \w@rps {0 0 moveto}% } + +% Notes: +% - mv (move to) This command includes a stroke before the moveto. The +% stroke terminates a path and the move begins another path. +% - bs (begin segment) encloses a segment in a gsave/grestore to keep +% changes to line parameters local. +% - es (end segment) does a "stroke grestore" to make sure lines inside +% the segment use the line parameters local to that segment +% - ar (arc) The path is generated and stroked inside a gsave/grestore, +% leaving the current path intact. +% - cr (circle) The path is generated and stroked inside a gsave/grestore, +% leaving the current path intact. +% - fc (filled circle) The path is generated and filled inside a gsave/ +% grestore, keeping the fill level local to the circle. The current +% path is left intact. +% - el (ellipse) The path is generated and stroked inside a gsave/grestore, +% leaving the current path intact. The elliptical path is defined +% with different x and y scaling, then stroked with default scaling +% to give a constant line thickness. +% - fe (filled ellipse) The path is generated and filled inside a gsave/ +% grestore, leaving the current path intact. +% - fl (fill) The current path is closed and filled inside a gsave/restore, +% keeping the fill level local. A newpath terminates the path. +% - fp (fill path) The current path is closed and then filled inside a +% gsave/grestore. Finally the closed path is stroked, implicitly +% terminating the path. +% - av (arrow vector) The arrow vector is drawn inside a gsave/grestore. +% The line width and type are those currently in effect. After the +% grestore, the current path is continued with a move to the tip of +% the vector. + +% ===== Close the PostScript file +% Write a trailer with the BoundingBox, close the file. Note that the +% BoundingBox may be larger than the commands in the PostScript file +% indicate. This is due to the fact that multiple move commands in +% a row are collapsed into a single move. The BoundingBox information +% includes the effect of the moves which were expunged. \def\t@drclose {% -\bgroup -\w@rps {stroke end showpage}% -\w@rps {\p@p Trailer:}% -\pixtobp \xminpix \l@lxbp \pixtobp \yminpix \l@lybp -\pixtobp \xmaxpix \u@rxbp \pixtobp \ymaxpix \u@rybp -\w@rps {\p@p BoundingBox: \l@lxbp\space \l@lybp\space -\u@rxbp\space \u@rybp}% -\w@rps {\p@p EOF}% -\egroup -\immediate\closeout\drawfile + \bgroup + \w@rps {stroke end showpage}% + \w@rps {\p@p Trailer:}% + \pixtobp \xminpix \l@lxbp \pixtobp \yminpix \l@lybp + \pixtobp \xmaxpix \u@rxbp \pixtobp \ymaxpix \u@rybp + \w@rps {\p@p BoundingBox: \l@lxbp\space \l@lybp\space + \u@rxbp\space \u@rybp}% + \w@rps {\p@p EOF}% + \egroup + \immediate\closeout\drawfile } + +% =============================================================== \catcode`\@=\catamp diff --git a/Master/texmf-dist/doc/support/texdraw/txdexamp.latex b/Master/texmf-dist/tex/generic/texdraw/txdexamp.latex index c3ea8b4eee9..c3ea8b4eee9 100644 --- a/Master/texmf-dist/doc/support/texdraw/txdexamp.latex +++ b/Master/texmf-dist/tex/generic/texdraw/txdexamp.latex diff --git a/Master/texmf-dist/doc/support/texdraw/txdexamp.tex b/Master/texmf-dist/tex/generic/texdraw/txdexamp.tex index 371b0e64969..371b0e64969 100644 --- a/Master/texmf-dist/doc/support/texdraw/txdexamp.tex +++ b/Master/texmf-dist/tex/generic/texdraw/txdexamp.tex diff --git a/Master/texmf-dist/tex/generic/texdraw/txdps.tex b/Master/texmf-dist/tex/generic/texdraw/txdps.tex index 16eb8a926f7..e5ea49e9ed9 100644 --- a/Master/texmf-dist/tex/generic/texdraw/txdps.tex +++ b/Master/texmf-dist/tex/generic/texdraw/txdps.tex @@ -18,8 +18,17 @@ % Canada H3A 2A7 % kabal@TSP.EE.McGill.CA + +% =============================================================== + \chardef\catamp=\the\catcode`\@ \catcode`\@=11 + +% The TeXdraw macros assume that a PostScript currentpoint is always +% defined. When using the following macros, always finish off with +% by reestablishing a PostScript currentpoint. This can be done with +% a \PSmoveto command. + \def\PSsetlinecap #1 {\writeps{#1 setlinecap}} \def\PSsetlinejoin #1 {\writeps{#1 setlinejoin}} \def\PSstroke {\writeps{stroke}} @@ -27,19 +36,20 @@ \def\PSclosepath {\writeps{closepath}} \def\PSfill {\writeps{fill}} \def\PSlineto (#1 #2){\getpos (#1 #2)\a@rgx\a@rgy -\s@etpospix \a@rgx \a@rgy -\writeps {\the\x@pix\space \the\y@pix\space lineto}} + \s@etpospix \a@rgx \a@rgy + \writeps {\the\x@pix\space \the\y@pix\space lineto}} \def\PSmoveto (#1 #2){\getpos (#1 #2)\a@rgx\a@rgy -\s@etpospix \a@rgx \a@rgy -\writeps {\the\x@pix\space \the\y@pix\space moveto}} + \s@etpospix \a@rgx \a@rgy + \writeps {\the\x@pix\space \the\y@pix\space moveto}} \def\PSarc r:#1 sd:#2 ed:#3 (#4 #5){\getpos (#4 #5)\a@rgx\a@rgy -\s@etpospix \a@rgx \a@rgy -\coordtopix {#1}\t@pixa -\writeps{\the\x@pix\space \the\y@pix\space -\the\t@pixa\space #2 #3 arc}} + \s@etpospix \a@rgx \a@rgy + \coordtopix {#1}\t@pixa + \writeps{\the\x@pix\space \the\y@pix\space + \the\t@pixa\space #2 #3 arc}} \def\PSarcn r:#1 sd:#2 ed:#3 (#4 #5){\getpos (#4 #5)\a@rgx\a@rgy -\s@etpospix \a@rgx \a@rgy -\coordtopix {#1}\t@pixa -\writeps{\the\x@pix\space \the\y@pix\space -\the\t@pixa\space #2 #3 arcn}} + \s@etpospix \a@rgx \a@rgy + \coordtopix {#1}\t@pixa + \writeps{\the\x@pix\space \the\y@pix\space + \the\t@pixa\space #2 #3 arcn}} + \catcode`\@=\catamp diff --git a/Master/texmf-dist/tex/generic/texdraw/txdtools.tex b/Master/texmf-dist/tex/generic/texdraw/txdtools.tex index c3d5ee1aa01..676660bca7d 100644 --- a/Master/texmf-dist/tex/generic/texdraw/txdtools.tex +++ b/Master/texmf-dist/tex/generic/texdraw/txdtools.tex @@ -18,63 +18,128 @@ % Canada H3A 2A7 % kabal@TSP.EE.McGill.CA + +% =============================================================== + +% These macros use temporary count registers defined by TeXdraw +% \t@counta \t@pixa +% \t@countb \t@pixb +% \t@countc \t@pixc +% \t@pixd + \chardef\catamp=\the\catcode`\@ \catcode`\@=11 + + +% ===== Real arithmetic +% Real addition +% #1 - summand +% #2 - summand +% #3 - macro name to capture the real result \def\realadd #1#2#3{\dimen0=#1pt -\dimen2=#2pt -\advance \dimen0 by \dimen2 -\edef #3{\expandafter\c@lean\the\dimen0}} + \dimen2=#2pt + \advance \dimen0 by \dimen2 + \edef #3{\expandafter\c@lean\the\dimen0}} + +% Real division +% #1 - numerator +% #2 - denominator (divisor) +% #3 - macro name to capture the real result \def\realdiv #1#2#3{\dimen0=#1pt -\t@counta=\dimen0 -\dimen0=#2pt -\t@countb=\dimen0 -\intdiv \t@counta \t@countb #3} + \t@counta=\dimen0 + \dimen0=#2pt + \t@countb=\dimen0 + \intdiv \t@counta \t@countb #3} + +% ===== Integer arithmetic + +% Length of the hypotenuse +% Find the length of a vector, lenhyp = sqrt(dx*dx + dy*dy) +% #1 - integer value, dx +% #2 - integer value, dy +% #3 - count register to capture the integer value \def\lenhyp #1#2#3{\t@counta=#1% -\multiply \t@counta by \t@counta -\t@countb=#2% -\multiply \t@countb by \t@countb -\advance \t@counta by \t@countb -\sqrtnum \t@counta #3} + \multiply \t@counta by \t@counta + \t@countb=#2% + \multiply \t@countb by \t@countb + \advance \t@counta by \t@countb + \sqrtnum \t@counta #3} + +% Square root of an integer +% Newton-Raphson iteration to find the square root, integer argument +% Let the current estimate of the square root of x be b(k). +% Form an error function, e(k)=b(k)*b(k)-x. Follow the gradient of the +% error to calculate the next guess, +% +% e(k) - 0 d e(k) b(k) + x/b(k) +% ---------- = ------ = 2*b(k) ==> b(k+1) = ------------- +% b(k)-b(k+1) d b(k) 2 +% +% Note this iteration does not work for x=0, since the guess is then b(k)=0. +% Rename the count registers to have more suggestive names \let\bk=\t@counta \let\bn=\t@countb \let\xval=\t@countc \def\sqrtnum #1#2{\xval=#1% -\bk=\xval -\loop -\bn=\xval -\divide \bn by \bk -\advance \bn by \bk -\advance \bn by 1 -\divide \bn by 2 -\ifnum \bn < \bk -\bk=\bn -\repeat -#2=\bn} + \bk=\xval + \loop + \bn=\xval + \divide \bn by \bk + \advance \bn by \bk + \advance \bn by 1 % rounding + \divide \bn by 2 + \ifnum \bn < \bk + \bk=\bn + \repeat + #2=\bn} + +% ===== Coordinate macros + +% Return the coordinates of the current position +% #1 - macro name to capture the x-coordinate +% #2 - macro name to capture the y-coordinate \def\currentpos #1#2{\t@pixa=\x@pix -\advance \t@pixa by -\x@segoffpix -\pixtocoord \t@pixa #1 -\t@pixa=\y@pix -\advance \t@pixa by -\y@segoffpix -\pixtocoord \t@pixa #2} + \advance \t@pixa by -\x@segoffpix + \pixtocoord \t@pixa #1 + \t@pixa=\y@pix + \advance \t@pixa by -\y@segoffpix + \pixtocoord \t@pixa #2} + +% Length of a vector +% Find the length of the vector between coordinate (#1 #2) and +% coordiante (#3 #4). The length is expressed relative to the +% current scaling. +% (#1 #2) - vector start coordinates +% (#3 #4) - vector end coordinates +% #5 - macro name to receive the length \def\vectlen (#1 #2)(#3 #4)#5{\getpos (#1 #2)\x@arga\y@arga -\getpos (#3 #4)\x@argb\y@argb -\coordtopix \x@arga \t@pixa -\coordtopix \x@argb \t@pixb -\advance \t@pixb by -\t@pixa -\coordtopix \y@arga \t@pixc -\coordtopix \y@argb \t@pixd -\advance \t@pixd by -\t@pixc -\lenhyp \t@pixb \t@pixd \t@pixc -\pixtocoord \t@pixc #5} + \getpos (#3 #4)\x@argb\y@argb + \coordtopix \x@arga \t@pixa + \coordtopix \x@argb \t@pixb + \advance \t@pixb by -\t@pixa + \coordtopix \y@arga \t@pixc + \coordtopix \y@argb \t@pixd + \advance \t@pixd by -\t@pixc + \lenhyp \t@pixb \t@pixd \t@pixc + \pixtocoord \t@pixc #5} + +% Cossine and sine +% Find the cosine and sine of the angle of a vector directed from +% the coordinate (#1 #2) to the coordinate (#3 #4). +% (#1 #2) - start coordinates +% (#3 #4) - end coordinates +% #5 - macro name to receive the cosine of the angle +% #6 - macro name to receive the sine of the angle \def\cossin (#1 #2)(#3 #4)#5#6{\getpos (#1 #2)\x@arga\y@arga -\getpos (#3 #4)\x@argb\y@argb -\coordtopix \x@arga \t@pixa -\coordtopix \x@argb \t@pixb -\advance \t@pixb by -\t@pixa -\coordtopix \y@arga \t@pixc -\coordtopix \y@argb \t@pixd -\advance \t@pixd by -\t@pixc -\lenhyp \t@pixb \t@pixd \t@pixc -\intdiv \t@pixb\t@pixc #5% -\intdiv \t@pixd\t@pixc #6} + \getpos (#3 #4)\x@argb\y@argb + \coordtopix \x@arga \t@pixa + \coordtopix \x@argb \t@pixb + \advance \t@pixb by -\t@pixa + \coordtopix \y@arga \t@pixc + \coordtopix \y@argb \t@pixd + \advance \t@pixd by -\t@pixc + \lenhyp \t@pixb \t@pixd \t@pixc + \intdiv \t@pixb\t@pixc #5% + \intdiv \t@pixd\t@pixc #6} + \catcode`\@=\catamp diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check index 5fed1ac0164..f009bdf470f 100755 --- a/Master/tlpkg/bin/tlpkg-ctan-check +++ b/Master/tlpkg/bin/tlpkg-ctan-check @@ -445,7 +445,7 @@ my @TLP_working = qw( tex-ewd tex-font-errors-cheatsheet tex-gyre tex-gyre-math tex-label tex-overview texapi texbytopic texcount - texdef texdiff texdirflatten texilikechaps texilikecover + texdef texdiff texdirflatten texdraw texilikechaps texilikecover texliveonfly texloganalyser texlogos texmate texments texpower texshade textcase textfit textglos textgreek textmerg textopo textpath textpos diff --git a/Master/tlpkg/libexec/ctan2tds b/Master/tlpkg/libexec/ctan2tds index 9e024db4713..40445784368 100755 --- a/Master/tlpkg/libexec/ctan2tds +++ b/Master/tlpkg/libexec/ctan2tds @@ -953,7 +953,7 @@ chomp ($Build = `cd $Master/../Build/source && pwd`); 'tex-gyre-math', "&MAKEflatten", 'tex-ps', "die 'skipping, not ready, sorry'", 'tex-refs', "die 'skipping, not ready, sorry'", - 'texdraw', "&MAKEtexdraw", + 'texdraw', "&MAKEflatten", 'texemplar', "die 'skipping, await request, 199x'", 'texlipse', "die 'skipping, plugin for Eclipse'", 'texlog-extract', "die 'skipping, Ruby, not self-locating'", @@ -1116,6 +1116,7 @@ chomp ($Build = `cd $Master/../Build/source && pwd`); 'pictex' => '&PREHOOK_pictex', 'skb' => '&PREHOOK_flatten1', 'suftesi' => '&PREHOOK_suftesi', + 'texdraw' => '&PREHOOK_texdraw', 'tui' => '&PREHOOK_tui', 'vhistory' => '&PREHOOK_vhistory', 'wsuipa' => '&PREHOOK_wsuipa', @@ -1184,6 +1185,7 @@ chomp ($Build = `cd $Master/../Build/source && pwd`); 'pxchfon' => '&POSTpxchfon', 'splitindex' => '&POST_do_man', 'tap', => '&POSTtap', + 'texdraw', => '&POSTtexdraw', 'tipa-de' => '&POST_rmsymlink', 'xecyr' => '&POSTxecyr', 'xetex-pstricks' => '&POSTxetexpstricks', @@ -1274,6 +1276,7 @@ $standarddest = "texmf-dist"; 'systeme', 'generic', 'tabto-generic', 'generic', 'tap', 'generic', + 'texdraw', 'generic', 'texsis', 'texsis', 'textmerg', 'generic', 'tugboat-plain', 'plain', @@ -1551,6 +1554,7 @@ $standardtex='\.(.bx|cfg|sty|clo|ldf|cls|def|fd|cmap|4ht)$'; 'taylor', 'diagrams.tex', 'tex-ewd', 'dotnot.tex', 'texapi', 'texapi\.tex', + 'texdraw', 'tex$|' . $standardtex, 'texsis', '\.txs|TXS.*tex|texsis.tex', 'thesis-titlepage-fhac', 'LOGO.*|' . $standardtex, 'threeparttable', '^..[^s].*\.sty', # not miscdoc.sty @@ -1808,6 +1812,7 @@ $standardtex='\.(.bx|cfg|sty|clo|ldf|cls|def|fd|cmap|4ht)$'; 'texcount', 'support', 'texdiff', 'support', 'texdirflatten', 'support', + 'texdraw', 'support', 'texloganalyser', 'support', 'texsis', 'otherformats', 'textmerg', 'generic', @@ -2478,6 +2483,7 @@ $standardxmt='\.xmt'; # packages which have info files to build and then install. %specialtexinfos = ( 'mf2pt1' => '.*\.texi', + 'texdraw' => '.*\.texi', ); # packages which have man pages to install. @@ -3226,7 +3232,7 @@ sub dotexinfos { closedir (DOT) || die "closedir(.) failed: $! in " . `pwd`; print "tl_texi_to_info for: @texi_files\n"; - &SYSTEM ("$MAKEINFO --no-split @texi_files"); + &SYSTEM ("$MAKEINFO --force --no-split @texi_files"); # install() uses the @filenames global, ugh. local @filenames = <*.info>; @@ -3994,17 +4000,6 @@ sub MAKEtamethebeast { &SYSTEM("$CP -r $packagedir/* $destdir"); } -sub MAKEtexdraw { - &setup; - chdir("$DEST/doc/$whichdocformat/$package"); - &buildfilelist; - &dotex; - &domakeindex; - &SYSTEM("mkdir -p $DEST/doc/generic/texdraw"); - &SYSTEM("$MV manual/* $DEST/doc/generic/texdraw"); - killfiles($standardclean); -} - sub MAKEexpressg { &setup; chdir("$DEST/doc/$whichdocformat/$package"); @@ -4802,6 +4797,13 @@ sub PREHOOK_suftesi { &SYSTEM ("$MV doc/* latex/* ."); } +sub PREHOOK_texdraw { + print "PREHOOK_$package - remove compactified, tar texindex source\n"; + &SYSTEM ("$RM -rf compact"); + &SYSTEM ("cd manual && tar czf txi-src.tgz *.c *.h texi2dvi texinfo.tex"); + &SYSTEM ("cd manual && $RM *.c *.h texi2dvi texinfo.tex"); +} + sub PREHOOK_tui { print "PREHOOK_$package - flatten only some subdirs\n"; &SYSTEM ("$MV doc/* tex/* ."); @@ -5567,6 +5569,14 @@ sub POSTtap { &SYSTEM ("$MV tapdoc/* ."); } +sub POSTtexdraw { + print "POST$package - rename info file\n"; + &SYSTEM ("$MV texdraw texdraw.info"); + &mv_with_mkdir ("texdraw.info", "$TOPDEST/texmf-dist/doc/info/"); + # not worth the hassle of fixing @setfilename and re-uploading, + # or forcing the output file name. +} + sub POSTxecyr { print "POST$package - handling bat, moving language.dat.add from runtime\n"; &SYSTEM ("$MV $DEST/tex/generic/xecyr/language.dat.add" |