%%%%%%%%%%%%%%%%%%%%%% rlepsf.tex %%%%%%%%%%%%%%%% % Version 1.0 (beta test) % % Comments, problems etc to : cpr@maths.warwick.ac.uk % % Macros to relabel an eps file with TeX labels, % written by Michael Greene, with TeX front end % written by Colin Rourke. % % Designed for use with the macro package epsf.tex % and dvips converter (written by Rokicki and Knuth) % and with eps output from a variety of drawing % packages (tested with output from xfig and Adobe % Illustrator, and with hand-drawn figures). % % To use this package type \input rlepsf (in place of % the usual \input epsf ). Then place each eps file % in a \relabelbox ... \endrelabelbox with relabelling % instructions after the \epsfbox{..} . % % The eps file is called exactly as usual with epsf.tex % typical instructions being \epsfbox{filename.eps} % and \epsfxsize dimension \epsfbox{filename.eps} % (where "dimension" is the required finished width of % the diagram). % % There are three (re)labelling macros: % % \relabel {pslabel}{TeX label} % \adjustrelabel {pslabel}{TeX label} % \extralabel {extra label} % % \relabel uses the ps file position for the new TeX % label (which can be any TeX output). The new label % is positioned with same reference point (left-hand % end of baseline) as the original ps label. % \adjustrelabel adjusts the position by dx,dy and % is useful for fine tuning the position of the % new label. \extralabel allows extra TeX labels to be % inserted. The positions x,y are measured from the % bottom right-hand corner of the box (so x is typically % negative) ! The re/extra-labelling instructions can % be given in any order and any TeX dimensions can % be used for x,y,dx,dy. % % The result is a box of dimensions the original epsbox % but with new TeX labels. This can then be inserted in % $$ ... $$ or \centerline{ ... } for display, or % combined with other boxes to form a larger display. % % The \relabelbox ... \endrelabelbox forms a TeX group; % thus instructions for resizing text for the new labels % (eg \small ) will remain local to this group. % % There are two main uses for the package : % % (1) Creating graphics with TeX labels : % Draw the graphic with dummy ps labels (all different and in % some common font eg Times-Roman). Then use \relabel 'ling % instructions to replace the dummy labels by the genuine TeX % labels. Use roughly the same size dummy labels as the final % TeX labels and then the position will probably be perfect % first time. Adjust the positions if necessary by editing % \relabel to \adjustrelabel with appropriate . % % (2) Editing the ps labels in an existing eps file to TeX % labels : % Use \relabel and \adjustrelabel to replace the % existing labels. You may have to use \extralabel for % some of the new labels (or to edit the eps file to change % repeated ps labels to be different), see note (2) below. % % Notes: % (1) All ps labels are removed whether or not % instructions for relabelling are given. % (2) If the eps file has two or more labels the % same, then only one will be replaced. Therefore % if you are designing a diagram from scratch then % use different temporary ps labels for your labels % even if you wish them to finish the same. If % you are relabelling an existing eps diagram with TeX % labels then use \extralabel's to replace the other % label(s) or edit the eps file to change the repeated % labels to different ones. % (3) The macros are sensitive to extra spaces and % the above syntax should be used. % (4) The output will not view correctly on a dvi % viewer which will typically show the new labels % superimposed at the bottom right-hand corner. % However those produced by \extralabel will be shown % correctly positioned. % % A typical example of use is appended. More realistic % examples are given in the postscript documentation file % rlepsdoc.ps. CPR 16-12-96 % % \input epsf % % Initialise for MTG control % \special{! (MTG set-up) pop userdict /MTGdict 99 dict put MTGdict begin /Mshow {[ MTGdict /rllist get aload length 2 add -1 roll currentpoint transform ] MTGdict /rllist 3 2 roll put} def /findlabel {/sought exch def /MTGx 3 index def /MTGy 2 index def aload length 3 idiv dup 0 eq {pop} {{2 index sought eq {/MTGy exch def /MTGx exch def pop} {pop pop pop} ifelse} repeat} ifelse exch MTGx exch sub exch MTGy exch sub idtransform translate } def end}% % \def\relabelbox{% \hbox\bgroup% \special{ps:(MTG takes control) pop /MTGsavestate save def /p /show load def MTGdict begin gsave /rllist [] def /save {false} def /restore {pop} def /show {Mshow} def /ashow {Mshow pop pop} def /widthshow {Mshow pop pop pop} def /awidthshow {Mshow 5 {pop} repeat} def /xshow {pop Mshow} def /yshow {pop Mshow} def /xyshow {pop Mshow} def /cshow {Mshow pop} def /kshow {Mshow pop} def}% \special{ps:/a {moveto} bind def}% }% \def\endrelabelbox{% \special{ps:(MTG signs off) pop grestore end /restore {restore} bind def MTGsavestate restore}\egroup% }% \def\relabel #1#2 {% \special{ps:/a {} def}% \special{ps:gsave /a {moveto} bind def transform MTGdict /rllist get (#1) findlabel}% \smash{\rlap{#2}}% \special{ps:grestore}% }% \def\adjustrelabel <#1,#2> #3#4 {% \special{ps:/a {} def}% \special{ps:gsave /a {moveto} bind def transform MTGdict /rllist get (#3) findlabel}% \smash{\rlap{\kern #1 \raise #2\hbox{#4}}}% \special{ps:grestore}% }% \def\extralabel <#1,#2> #3 {\smash{\rlap{\kern #1 \raise #2\hbox{#3}}}}% \endinput % %%%% Typical example of use : % \input rlepsf.tex The line before the figure.\hfil\break \centerline{% \relabelbox \epsfxsize 3truein \epsfbox {figure1.eps} %% Give label size instruction (eg \small) here. \adjustrelabel <0pt,1pt> {Ab}{$A^b$} \adjustrelabel <-4pt,0pt> {P}{$P$} \relabel {Bc}{$B_c$} \extralabel <-.3truein,0.3truein> {First extra label} \adjustrelabel <1pt,0pt> {IP"}{$\int P''$} \adjustrelabel <1pt,0pt> {P'}{$P'$} \extralabel <-1.5cm,1.5cm> {Second extra label} \endrelabelbox } The line after the figure. \bye