Go to the first, previous, next, last section, table of contents.


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.

2.1 Accessing TeXdraw

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 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'.

\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.

\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}

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}
  ...                     % TeXdraw commands to generate a drawing
\end{texdraw}
 ...
\end{document}

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 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 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 return to vertical mode. For LaTeX, a structured equivalent to the \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 commands that will be executed at the beginning of every TeXdraw drawing. It is invoked as \everytexdraw{ ...}, with the desired TeXdraw commands as arguments.

\btexdraw
Start a TeXdraw drawing. The drawing is terminated with an \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}
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. 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{ ... }
Center a TeXdraw box horizontally. The argument contains TeXdraw commands. The resulting box has the horizontal size \hsize and height equal to the height of the drawing.
\everytexdraw{ ... }
Specify TeXdraw commands to be executed at the beginning of every TeXdraw drawing.

2.2 Command syntax

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 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.

2.3 TeXdraw coordinates

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 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).

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 (see section 3.3 Saving positions).

\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.

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
Set the units to big points.
\lvec ( 2.2 +5.5) \lvec(2.3 -2) \lvec(2.2 5.4 )
Examples of acceptable coordinate specifications.

2.5 Line vectors

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 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 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 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 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 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 coordinates as displacements relative to the current position. Given 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)
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)
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)
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 pattern and line gray level rendition. In addition, commands for changing the type and size of the arrowhead are available.

\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
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
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.

Examples of line parameter and arrowhead settings are shown in the following code.

\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)
}

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.

\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 reference point at the current position. The text reference point is set with the \textref command.

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}
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 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.

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
Set the text reference point for subsequent text commands. The 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 reference point is determined before rotation. The initial text reference point corresponds to \textref h:L v:B.

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 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.

\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}
}

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.

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 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 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 command does not affect the size of the drawing.

\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
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 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
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 necessary to contain the ellipse.
\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 superimpose an arc.

\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)
}

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.

2.8 Bezier curves

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 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 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 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)
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. 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.

\btexdraw
  \move (0 0)
  \clvec (0 1)(1 0)(1 1)
\etexdraw

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
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 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.

\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
}

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 circle, ellipse and arc commands do not affect the definition of the 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.


Go to the first, previous, next, last section, table of contents.