There are several LaTeX packages that purport to do this, but they all have their limitations because the TeX machine isn't really designed to solve this sort of problem. Piet van Oostrum has conducted a survey of the available packages; he recommends:
floatflt
\begin{floatingfigure}[options]{width of figure} figure contents \end{floatingfigure}
There is a (more or less similar) floatingtable
environment.
The tables or figures can be set left or right, or alternating on even/odd pages in a double-sided document.
The package works with the multicol
package, but doesn't work well
in the neighbourhood of list environments (unless you change your
LaTeX document).
wrapfig
\begin{wrapfigure}[height of figure in lines]{l|r}[overhang]{width} figure, caption, etc. \end{wrapfigure}
\end{wrapfigure}
The syntax of the wraptable
environment is similar.
Height can be omitted, in which case it will be calculated by the
package; the package will use the greater of the specified and the
actual width. The {l
,r
,etc.}
parameter can also be
specified as i
(nside) or o
(utside) for two-sided
documents, and uppercase can be used to indicate that the picture
should float. The overhang allows the figure to be moved into the
margin. The figure or table will entered into the list of figures
or tables if you use the \caption
command.
The environments do not work within list environments that end before the figure or table has finished, but can be used in a parbox or minipage, and in twocolumn format.
picins
\parpic(width,height)(x-off,y-off)[Options][Position]{Picture}
Paragraph text
All parameters except the Picture are optional. The picture can be positioned left or right, boxed with a rectangle, oval, shadowbox, dashed box, and a caption can be given which will be included in the list of figures.
Unfortunately (for those of us whose understanding of German is not good), the documentation is in German. Piet van Oostrum has written an English summary.