Next: , Previous: , Up: Environments   [Contents][Index]


8.19 picture

Synopses:

\begin{picture}(width,height)
   picture command
\end{picture}

or

\begin{picture}(width,height)(xoffset,yoffset)
  picture command
\end{picture}

Where there may be any number of picture command’s.

An environment to create simple pictures containing lines, arrows, boxes, circles, and text. This environment is not obsolete, but new documents typically use much more powerful graphics creation systems, such as TikZ, PSTricks, MetaPost, or Asymptote. None of these are covered in this document; see CTAN.

To start, here’s an example showing the parallelogram law for adding vectors.

\setlength{\unitlength}{1cm}
\begin{picture}(6,6)      % picture box will be 6cm wide by 6cm tall
  \put(0,0){\vector(2,1){4}}  % for every 2 over this vector goes 1 up
    \put(2,1){\makebox(0,0)[l]{\ first leg}}
  \put(4,2){\vector(1,2){2}}
    \put(5,4){\makebox(0,0)[l]{\ second leg}}  
  \put(0,0){\vector(1,1){6}}
    \put(3,3){\makebox(0,0)[r]{sum\ }}  
\end{picture}

The picture environment has one required argument, a pair of positive real numbers (width,height). Multiply these by the value \unitlength to get the nominal size of the output, i.e. the space that LaTeX reserves on the output page. This nominal size need not be how large the picture really is; LaTeX will draw things from the picture outside the picture’s box.

This environment also has an optional argument (xoffset,yoffset). It is used to shift the origin. Unlike most optional arguments, this one is not contained in square brackets. As with the required argument, it consists of a pair of two real numbers, but these may also be negative or null. Multiply these by \unitlength to get the coordinates of the point at the lower-left corner of the picture.

For example, if \unitlength has been set to 1mm, the command

\begin{picture}(100,200)(10,20)

produces a box of width 100 millimeters and height 200 millimeters. The picture’s origin is the point (10mm,20mm) and so the lower-left corner is there, and the upper-right corner is at (110mm,220mm). When you first draw a picture you typically omit the optional argument, leaving the origin at the lower-left corner. If you then want to modify your picture by shifting everything, you can just add the appropriate optional argument.

Each picture command tells LaTeX where to put something by providing its position. A position is a pair such as (2.4,-5) giving the x- and y-coordinates. A coordinate is a not a length, it is a real number (it may have a decimal point or a minus sign). It specifies a length in multiples of the unit length \unitlength, so if \unitlength has been set to 1cm, then the coordinate 2.54 specifies a length of 2.54 centimeters.

LaTeX’s default for \unitlength is 1pt. It is a rigid length (see Lengths). Change it with the \setlength command (see \setlength). Make this change only outside of a picture environment.

The picture environment supports using standard arithmetic expressions as well as numbers.

Coordinates are given with respect to an origin, which is by default at the lower-left corner of the picture. Note that when a position appears as an argument, as with \put(1,2){...}, it is not enclosed in braces since the parentheses serve to delimit the argument. Also, unlike in some computer graphics systems, larger y-coordinates are further up the page, for example, y = 1 is above y = 0.

There are four ways to put things in a picture: \put, \multiput, \qbezier, and \graphpaper. The most often used is \put. This

\put(11.3,-0.3){...}

places the object with its reference point at coordinates (11.3,-0.3). The reference points for various objects will be described below. The \put command creates an LR box (see Modes). Anything that can go in an \mbox (see \mbox & \makebox) can go in the text argument of the \put command. The reference point will be the lower left corner of the box. In this picture

\setlength{\unitlength}{1cm}
...\begin{picture}(1,1)
  \put(0,0){\line(1,0){1}}
  \put(0,0){\line(1,1){1}}
\end{picture}

the three dots are just slightly left of the point of the angle formed by the two lines. (Also, \line(1,1){1} does not call for a line of length one; rather the line has a change in the x coordinate of 1.)

The \multiput, qbezier, and graphpaper commands are described below.

You can also use this environment to place arbitrary material at an exact location. For example:

\usepackage{color,graphicx}  % in preamble
  ...
\begin{center}
\setlength{\unitlength}{\textwidth} 
\begin{picture}(1,1)      % leave space, \textwidth wide and tall
  \put(0,0){\includegraphics[width=\textwidth]{desertedisland.jpg}}
  \put(0.25,0.35){\textcolor{red}{X Treasure here}}
\end{picture}
\end{center}

The red X will be precisely a quarter of the \textwidth from the left margin, and 0.35\textwidth up from the bottom of the picture. Another example of this usage is to put similar code in the page header to get repeat material on each of a document’s pages.


Unofficial LaTeX2e reference manual