Labelling graphics

“Technical” graphics (such as graphs and diagrams) are often labelled with quite complex mathematical expressions: there are few drawing or graphing tools that can do such things (the honourable exception being MetaPost, which allows you to program the labels, in (La)TeX, in the middle of specifying your graphic).

Placing ‘labels’ on graphics produced by all those other tools is what we discuss here. (Note that the term “label” should be liberally interpreted; many of the techniques were designed for use when applying labels to figures, but they may be used equally well to draw funny faces on a figure … or anything.

The time-honoured psfrag package can help, if your image is included as an (encapsulated) PostScript file. Place an unique text in your graphic, using the normal text features of your tool, and you can ask psfrag to replace the text with arbitrary (La)TeX material. Psfrag’s “operative” command is \psfrag{Orig text}{Repl text}, which instructs the system to replace the original (“unique”) text with the TeX-typeset replacement text. Optional arguments permit adjustment of position, scale and rotation; full details may be found in pfgguide in the distribution.

Since psfrag works in terms of (encapsulated) PostScript files, it needs extra work for use with PDFLaTeX. Two techniques are available, using pst-pdf package in a mode designed to do this work; and using pdfrack.

The Pst-pdf package can support this “extra work” usage. In fact, the pst-pdf support package auto-pst-pdf offers a configuration setting precisely for use with psfrag.

If you have the ‘right’ environment (see below), you could try the pdfrack script bundle. The script aims to cut each figure out of your source, using it to produce a small LaTeX file with nothing but the figure inclusion commands. Each of these figure files is then processed to PostScript, compiled using the \psfrag commands, and the resulting output converted to PDF again.

Pdfrack is written to use the Unix Bourne shell (or equivalent); thus your environment needs to be a Unix-based system, or some equivalent such as cygwin under windows. (What is more, pdfrack’s author is rather disparaging about his package; the present author has never tried it.)

The psfragx package goes one step further than psfrag: it provides a means whereby you can put the psfrag commands into the preamble of your EPS file itself. Psfrag has such a command itself, but deprecates it; psfragx has cleaned up the facility, and provides a script laprint for use with Matlab to produce appropriately tagged output. (In principle, other graphics applications could provide a similar facility, but apparently none does.)

Emacs users may find the embedded editor iTe a useful tool for placing labels: it’s a (La)TeX-oriented graphical editor written in Emacs Lisp. You create iteblock environments containing graphics and text, and may then invoke iTe to arrange the elements relative to one another.

Another useful approach is overpic, which overlays a picture environment on a graphic included by use of \includegraphics. This treatment lends itself to ready placement of texts and the like on top of a graphic. The package can draw a grid for planning your “attack”; the distribution comes with simple examples.

The lpic package is somewhat similar to overpic; it defines an environment lpic (which places your graphic for you): within the environment you may use the command \lbl to position LaTeX material at appropriate places over the graphic.

Pinlabel is another package whose author thought in the same sort of way as that of overpic; the documentation explains in detail how to plan your ‘labelling attack’ — in this case by loading your figure into a viewer and taking measurements from it. (The package discusses direct use of ghostscript as well as customised viewers such as gsview or gv.)

Pstricks can of course do everything that overpic, lpic or pinlabel can, with all the flexibility of PostScript programming that it offers. This capability is exemplified by the pst-layout package, which seems to be a superset of both overpic and lpic.

Similarly, pgf/TikZ has all the power needed, but no explicit package has been released.

The pstricks web site has a page with several examples of labelling which will get you started; if pstricks is an option for you, this route is worth a try.

The confident user may, of course, do the whole job in a picture environment which itself includes the graphic. I would recommend overpic or the pstricks approach, but such things are plainly little more than a convenience over what is achievable with the do-it-yourself approach.

Distributed with psfragx

This answer last edited: 2013-06-03