| %%% -*-TeX-*- |
| %%% ==================================================================== |
| %%% @TeX-file{ |
| %%% author = "Tom Rokicki", |
| %%% version = "2.7.4", |
| %%% date = "14 February 2011", |
| %%% time = "15:44:06 MST", |
| %%% filename = "epsf.tex", |
| %%% address = "Tom Rokicki |
| %%% Box 2081 |
| %%% Stanford, CA 94309 |
| %%% USA", |
| %%% telephone = "+1 415 855 9989", |
| %%% checksum = "29223 653 3100 27123", |
| %%% email = "rokicki@cs.stanford.edu (Internet)", |
| %%% codetable = "ISO/ASCII", |
| %%% copyright = "This file is freely redistributable and |
| %%% placed into the public domain by Tomas |
| %%% Rokicki.", |
| %%% keywords = "PostScript, TeX", |
| %%% license = "public domain", |
| %%% supported = "yes", |
| %%% abstract = "This file contains macros to support the |
| %%% inclusion of Encapsulated PostScript files |
| %%% in TeX documents.", |
| %%% docstring = "This file contains TeX macros to include an |
| %%% Encapsulated PostScript graphic. It works |
| %%% by finding the bounding box comment, |
| %%% calculating the correct scale values, and |
| %%% inserting a vbox of the appropriate size at |
| %%% the current position in the TeX document. |
| %%% |
| %%% To use, simply use |
| %%% |
| %%% \input epsf % somewhere early on in your TeX file |
| %%% |
| %%% % then where you want to insert a vbox for a figure: |
| %%% \epsfbox{filename.ps} |
| %%% |
| %%% Alternatively, you can supply your own |
| %%% bounding box by |
| %%% |
| %%% \epsfbox[0 0 30 50]{filename.ps} |
| %%% |
| %%% This will not read in the file, and will |
| %%% instead use the bounding box you specify. |
| %%% |
| %%% The effect will be to typeset the figure as |
| %%% a TeX box, at the point of your \epsfbox |
| %%% command. By default, the graphic will have |
| %%% its `natural' width (namely the width of |
| %%% its bounding box, as described in |
| %%% filename.ps). The TeX box will have depth |
| %%% zero. |
| %%% |
| %%% You can enlarge or reduce the figure by |
| %%% using |
| %%% |
| %%% \epsfxsize = <dimen> \epsfbox{filename.ps} |
| %%% or |
| %%% \epsfysize = <dimen> \epsfbox{filename.ps} |
| %%% |
| %%% instead. Then the width of the TeX box will |
| %%% be \epsfxsize and its height will be scaled |
| %%% proportionately (or the height will be |
| %%% \epsfysize and its width will be scaled |
| %%% proportionately). |
| %%% |
| %%% The width (and height) is restored to zero |
| %%% after each use, so \epsfxsize or \epsfysize |
| %%% must be specified before EACH use of |
| %%% \epsfbox. |
| %%% |
| %%% A more general facility for sizing is |
| %%% available by defining the \epsfsize macro. |
| %%% Normally you can redefine this macro to do |
| %%% almost anything. The first parameter is |
| %%% the natural x size of the PostScript |
| %%% graphic, the second parameter is the |
| %%% natural y size of the PostScript graphic. |
| %%% It must return the xsize to use, or 0 if |
| %%% natural scaling is to be used. Common uses |
| %%% include: |
| %%% |
| %%% \epsfxsize % just leave the old value alone |
| %%% 0pt % use the natural sizes |
| %%% #1 % use the natural sizes |
| %%% \hsize % scale to full width |
| %%% 0.5#1 % scale to 50% of natural size |
| %%% \ifnum #1 > \hsize \hsize \else #1\fi |
| %%% % smaller of natural, hsize |
| %%% |
| %%% If you want TeX to report the size of the |
| %%% figure (as a message on your terminal when |
| %%% it processes each figure), use |
| %%% `\epsfverbosetrue'. |
| %%% |
| %%% If you only want to get the bounding box |
| %%% extents, without producing any output boxes |
| %%% or \special{}, then use \epsfgetbb{filename}. |
| %%% The bounding box corner coordinates are saved |
| %%% in the macros \epsfllx, \epsflly, \epsfurx, |
| %%% and \epsfury in PostScript units of big |
| %%% points. |
| %%% |
| %%% Revision history: |
| %%% |
| %%% --------------------------------------------- |
| %%% epsf.tex macro file: |
| %%% Originally written by Tomas Rokicki of |
| %%% Radical Eye Software, 29 Mar 1989. |
| %%% |
| %%% --------------------------------------------- |
| %%% Revised by Don Knuth, 3 Jan 1990. |
| %%% |
| %%% --------------------------------------------- |
| %%% Revised by Tomas Rokicki, 18 Jul 1990. |
| %%% Accept bounding boxes with no space after |
| %%% the colon. |
| %%% |
| %%% --------------------------------------------- |
| %%% Revised by Nelson H. F. Beebe |
| %%% <beebe@math.utah.edu>, 03 Dec 1991 [2.0]. |
| %%% Add version number and date typeout. |
| %%% |
| %%% Use \immediate\write16 instead of \message |
| %%% to ensure output on new line. |
| %%% |
| %%% Handle nested EPS files. |
| %%% |
| %%% Handle %%BoundingBox: (atend) lines. |
| %%% |
| %%% Do not quit when blank lines are found. |
| %%% |
| %%% Add a few percents to remove generation of |
| %%% spurious blank space. |
| %%% |
| %%% Move \special output to |
| %%% \epsfspecial{filename} so that other macro |
| %%% packages can input this one, then change |
| %%% the definition of \epsfspecial to match |
| %%% another DVI driver. |
| %%% |
| %%% Move size computation to \epsfsetsize which |
| %%% can be called by the user; the verbose |
| %%% output of the bounding box and scaled width |
| %%% and height happens here. |
| %%% |
| %%% --------------------------------------------- |
| %%% Revised by Nelson H. F. Beebe |
| %%% <beebe@math.utah.edu>, 05 May 1992 [2.1]. |
| %%% Wrap \leavevmode\hbox{} around \vbox{} with |
| %%% the \special so that \epsffile{} can be |
| %%% used inside \begin{center}...\end{center} |
| %%% |
| %%% --------------------------------------------- |
| %%% Revised by Nelson H. F. Beebe |
| %%% <beebe@math.utah.edu>, 09 Dec 1992 [2.2]. |
| %%% Introduce \epsfshow{true,false} and |
| %%% \epsfframe{true,false} macros; the latter |
| %%% suppresses the insertion of the PostScript, |
| %%% and instead just creates an empty box, |
| %%% which may be handy for rapid prototyping. |
| %%% |
| %%% --------------------------------------------- |
| %%% Revised by Nelson H. F. Beebe |
| %%% <beebe@math.utah.edu>, 14 Dec 1992 [2.3]. |
| %%% Add \epsfshowfilename{true,false}. When |
| %%% true, and \epsfshowfalse is specified, the |
| %%% PostScript file name will be displayed |
| %%% centered in the figure box. |
| %%% |
| %%% --------------------------------------------- |
| %%% Revised by Nelson H. F. Beebe |
| %%% <beebe@math.utah.edu>, 20 June 1993 [2.4]. |
| %%% Remove non-zero debug setting of \epsfframemargin, |
| %%% and change margin handling to preserve EPS image |
| %%% size and aspect ratio, so that the actual |
| %%% box is \epsfxsize+\epsfframemargin wide by |
| %%% \epsfysize+\epsfframemargin high. |
| %%% Reduce output of \epsfshowfilenametrue to |
| %%% just the bare file name. |
| %%% |
| %%% --------------------------------------------- |
| %%% Revised by Nelson H. F. Beebe |
| %%% <beebe@math.utah.edu>, 13 July 1993 [2.5]. |
| %%% Add \epsfframethickness for control of |
| %%% \epsfframe frame lines. |
| %%% |
| %%% --------------------------------------------- |
| %%% Revised by Nelson H. F. Beebe |
| %%% <beebe@math.utah.edu>, 02 July 1996 [2.6] |
| %%% Add missing initialization \epsfatendfalse; |
| %%% the lack of this resulted in the wrong |
| %%% BoundingBox being picked up, mea culpa, sigh... |
| %%% |
| %%% --------------------------------------------- |
| %%% Revised by Nelson H. F. Beebe |
| %%% <beebe@math.utah.edu>, 25 October 1996 [2.7] |
| %%% Update to match changes in from dvips 5-600 |
| %%% distribution: new user-accessible macros: |
| %%% \epsfclipon, \epsfclipoff, \epsfdrafton, |
| %%% \epsfdraftoff, change \empty to \epsfempty. |
| %%% |
| %%% --------------------------------------------- |
| %%% Revised by Nelson H. F. Beebe |
| %%% <beebe@math.utah.edu>, 18 May 2002 [2.7.1] |
| %%% Add write statements to echo input file |
| %%% names. Prior to that change, an error in |
| %%% such a file could be quite hard to track |
| %%% down: a long list of TeX page numbers could |
| %%% suddenly be followed by ``TeX buffer |
| %%% capacity'' exceeded, without any indication |
| %%% of the file that was responsible. |
| %%% |
| %%% --------------------------------------------- |
| %%% Revised by Nelson H. F. Beebe |
| %%% <beebe@math.utah.edu>, 16 May 2003 [2.7.2] |
| %%% Supply two critical percent characters that |
| %%% were mistakenly omitted in version 2.7.1, |
| %%% and resulted in a small amount of spurious |
| %%% horizontal space. |
| %%% |
| %%% --------------------------------------------- |
| %%% Revised by Nelson H. F. Beebe |
| %%% <beebe@math.utah.edu>, 14 Feb 2011 [2.7.3] |
| %%% Add previously-missing \space in rwi |
| %%% assignments (bug reported 14-Feb-2011 by |
| %%% Stefan Rueger <s.rueger@open.ac.uk>). |
| %%% |
| %%% --------------------------------------------- |
| %%% Revised by Nelson H. F. Beebe |
| %%% <beebe@math.utah.edu>, Karl Berry |
| %%% <karl@freefriends.org>, and Robin Fairbairns |
| %%% <Robin.Fairbairns@cl.cam.ac.uk>, |
| %%% 23 July 2005 [2.7.3] |
| %%% Add critical \hbox{} wrapper in \epsfsetgraph |
| %%% so that \epsfbox{} does not conflict with |
| %%% LaTeX center environment when \epsfbox{} is |
| %%% surrounded by other horizonal objects. |
| %%% Improve macro readability by adding legal, |
| %%% but invisible-in-typeset-output, spaces. |
| %%% Ensure that verbose status reports come |
| %%% inside (filename ...) list. |
| %%% |
| %%% --------------------------------------------- |
| %%% The checksum field above contains a CRC-16 |
| %%% checksum as the first value, followed by |
| %%% the equivalent of the standard UNIX wc |
| %%% (word count) utility output of lines, |
| %%% words, and characters. This is produced by |
| %%% Robert Solovay's checksum utility.", |
| %%% } |
| %%% ==================================================================== |
| |
| %\immediate \write16 {This is `epsf.tex' v2.0 <02 Dec 1991>}% |
| %\immediate \write16 {This is `epsf.tex' v2.1 <05 May 1992>}% |
| %\immediate \write16 {This is `epsf.tex' v2.2 <09 Dec 1992>}% |
| %\immediate \write16 {This is `epsf.tex' v2.3 <14 Dec 1992>}% |
| %\immediate \write16 {This is `epsf.tex' v2.4 <20 June 1993>}% |
| %\immediate \write16 {This is `epsf.tex' v2.5 <13 July 1993>}% |
| %\immediate \write16 {This is `epsf.tex' v2.6 <02 July 1996>}% |
| %\immediate \write16 {This is `epsf.tex' v2.7 <25 October 1996>}% |
| %\immediate \write16 {This is `epsf.tex' v2.7.1 <18 May 2002>}% |
| %\immediate \write16 {This is `epsf.tex' v2.7.2 <16 May 2003>}% |
| %\immediate \write16 {This is `epsf.tex' v2.7.3 <23 July 2005>}% |
| \immediate \write16 {This is `epsf.tex' v2.7.4 <14 February 2011>}% |
| % |
| \newread \epsffilein % file to \read |
| \newif \ifepsfatend % need to scan to LAST %%BoundingBox comment? |
| \newif \ifepsfbbfound % success? |
| \newif \ifepsfdraft % use draft mode? |
| \newif \ifepsffileok % continue looking for the bounding box? |
| \newif \ifepsfframe % frame the bounding box? |
| \newif \ifepsfshow % show PostScript file, or just bounding box? |
| \epsfshowtrue % default is to display PostScript file |
| \newif \ifepsfshowfilename % show the file name if \epsfshowfalse specified? |
| \newif \ifepsfverbose % report what you're making? |
| \newdimen \epsfframemargin % margin between box and frame |
| \newdimen \epsfframethickness % thickness of frame rules |
| \newdimen \epsfrsize % vertical size before scaling |
| \newdimen \epsftmp % register for arithmetic manipulation |
| \newdimen \epsftsize % horizontal size before scaling |
| \newdimen \epsfxsize % horizontal size after scaling |
| \newdimen \epsfysize % vertical size after scaling |
| \newdimen \pspoints % conversion factor |
| % |
| \pspoints = 1bp % Adobe points are `big' |
| \epsfxsize = 0pt % default value, means `use natural size' |
| \epsfysize = 0pt % ditto |
| \epsfframemargin = 0pt % default value: frame box flush around picture |
| \epsfframethickness = 0.4pt % TeX's default rule thickness |
| % |
| \def \epsfbox #1{% |
| \global \def \epsfllx {72}% |
| \global \def \epsflly {72}% |
| \global \def \epsfurx {540}% |
| \global \def \epsfury {720}% |
| \def \lbracket {[}% |
| \def \testit {#1}% |
| \ifx \testit \lbracket |
| \let \next = \epsfgetlitbb |
| \else |
| \let \next = \epsfnormal |
| \fi |
| \next{#1}% |
| }% |
| % |
| % We use \epsfgetlitbb if the user specified an explicit bounding box, |
| % and \epsfnormal otherwise. Because \epsfgetbb can be called |
| % separately to retrieve the bounding box, we move the verbose |
| % printing the bounding box extents and size on the terminal to |
| % \epsfstatus. Therefore, when the user provided the bounding box, |
| % \epsfgetbb will not be called, so we must call \epsfsetsize and |
| % \epsfstatus ourselves. |
| % |
| \def \epsfgetlitbb #1#2 #3 #4 #5]#6{% |
| \epsfgrab #2 #3 #4 #5 .\\% |
| \epsfsetsize |
| \epsfstatus{#6}% |
| \epsfsetgraph{#6}% |
| }% |
| % |
| \def \epsfnormal #1{% |
| \epsfgetbb{#1}% |
| \epsfsetgraph{#1}% |
| }% |
| % |
| \def \epsfgetbb #1{% |
| % |
| % The first thing we need to do is to open the |
| % PostScript file, if possible. |
| % |
| \openin\epsffilein=#1 |
| \immediate \write16 {(#1}% |
| \ifeof \epsffilein |
| \errmessage{Could not open file #1, ignoring it}% |
| \else %process the file |
| {% %start a group to contain catcode changes |
| % Make all special characters, except space, to be of type |
| % `other' so we process the file in almost verbatim mode |
| % (TeXbook, p. 344). |
| \chardef \other = 12% |
| \def \do ##1{\catcode`##1=\other}% |
| \dospecials |
| \catcode `\ = 10% |
| \epsffileoktrue %true while we are looping |
| \epsfatendfalse %[02-Jul-1996]: add forgotten initialization |
| \loop %reading lines from the EPS file |
| \read \epsffilein to \epsffileline |
| \ifeof \epsffilein %then no more input |
| \epsffileokfalse %so set completion flag |
| \else %otherwise process one line |
| \expandafter \epsfaux \epsffileline :. \\% |
| \fi |
| \ifepsffileok |
| \repeat |
| \ifepsfbbfound |
| \else |
| \ifepsfverbose |
| \immediate \write16 {No BoundingBox comment found in % |
| file #1; using defaults}% |
| \fi |
| \fi |
| }% %end catcode changes |
| \closein\epsffilein |
| \fi %end of file processing |
| \epsfsetsize %compute size parameters |
| \epsfstatus{#1}% |
| \immediate \write16 {)}% |
| }% |
| % |
| % Clipping control: |
| \def \epsfclipon {\def \epsfclipstring { clip}}% |
| \def \epsfclipoff {\def \epsfclipstring {\ifepsfdraft \space clip\fi}}% |
| \epsfclipoff % default for dvips is OFF |
| % |
| % The special that is emitted by \epsfsetgraph comes from this macro. |
| % It is defined separately to allow easy customization by other |
| % packages that first \input epsf.tex, then redefine \epsfspecial. |
| % This macro is invoked in the lower-left corner of a box of the |
| % width and height determined from the arguments to \epsffile, or |
| % from the %%BoundingBox in the EPS file itself. |
| % |
| % This version is for dvips: |
| \def \epsfspecial #1{% |
| \epsftmp=10\epsfxsize |
| \divide \epsftmp by \pspoints |
| \ifnum \epsfrsize = 0% |
| \relax |
| \special{PSfile=\ifepsfdraft psdraft.ps\else#1\fi\space |
| llx=\epsfllx\space |
| lly=\epsflly\space |
| urx=\epsfurx\space |
| ury=\epsfury\space |
| rwi=\number\epsftmp\space |
| \epsfclipstring |
| }% |
| \else |
| \epsfrsize=10\epsfysize |
| \divide \epsfrsize by \pspoints |
| \special{PSfile=\ifepsfdraft psdraft.ps\else#1\fi\space |
| llx=\epsfllx\space |
| lly=\epsflly\space |
| urx=\epsfurx\space |
| ury=\epsfury\space |
| rwi=\number\epsftmp\space |
| rhi=\number\epsfrsize |
| \epsfclipstring |
| }% |
| \fi |
| }% |
| % |
| % \epsfframe macro adapted from the TeXbook, exercise 21.3, p. 223, 331. |
| % but modified to set the box width to the natural width, rather |
| % than the line width, and to include space for margins and rules |
| \def \epsfframe #1% |
| {% |
| % method for detecting latex suggested by Robin Fairbairns, May 2005. |
| \ifx \documentstyle \epsfundefined |
| \relax |
| \else |
| % \leavevmode % so we can put this inside |
| % a latex centered environment |
| % The \leavevmode breaks under plain when this is inside a box, |
| % because it forces the figure to be the entire \hsize. On the |
| % other hand, we need the \leavevmode for it to work in LaTeX, |
| % because the {center} environment works by adjusting TeX's |
| % paragraph parameters. |
| % |
| % Compare the LaTeX sequence |
| % \begin{center} |
| % \epsfbox{tip.eps}q |
| % \end{center} |
| % (needs the \leavevmode to put the q right next to the image) |
| % |
| % with the plain TeX sequence: |
| % \leftline{\vbox{\epsfbox{tip.eps}}q} |
| % (had the q all the way over to the right, when \leavevmode was used) |
| \fi |
| % |
| \setbox0 = \hbox{#1}% |
| \dimen0 = \wd0 % natural width of argument |
| \advance \dimen0 by 2\epsfframemargin % plus width of 2 margins |
| \advance \dimen0 by 2\epsfframethickness % plus width of 2 rule lines |
| \relax |
| \hbox{% |
| \vbox |
| {% |
| \hrule height \epsfframethickness depth 0pt |
| \hbox to \dimen0 |
| {% |
| \hss |
| \vrule width \epsfframethickness |
| \kern \epsfframemargin |
| \vbox {\kern \epsfframemargin \box0 \kern \epsfframemargin }% |
| \kern \epsfframemargin |
| \vrule width \epsfframethickness |
| \hss |
| }% end hbox |
| \hrule height 0pt depth \epsfframethickness |
| }% end vbox |
| }% end hbox |
| \relax |
| }% |
| % |
| \def \epsfsetgraph #1% |
| {% |
| % |
| % Make the vbox and stick in a \special that the DVI driver can |
| % parse. \vfil and \hfil are used to place the \special origin at |
| % the lower-left corner of the vbox. \epsfspecial can be redefined |
| % to produce alternate \special syntaxes. |
| % |
| \ifvmode \leavevmode \fi |
| \relax |
| \hbox{% so we can put this in \begin{center}...\end{center} |
| \ifepsfframe \expandafter \epsfframe \fi |
| {\vbox to\epsfysize |
| {% |
| \ifepsfshow |
| % output \special{} at lower-left corner of figure box |
| \vfil |
| \hbox to \epsfxsize{\epsfspecial{#1}\hfil}% |
| \else |
| \vfil |
| \hbox to\epsfxsize{% |
| \hss |
| \ifepsfshowfilename |
| {% |
| \epsfframemargin=3pt % local change of margin |
| \epsfframe{{\tt #1}}% |
| }% |
| \fi |
| \hss |
| }% |
| \vfil |
| \fi |
| }% |
| }}% |
| \relax |
| % |
| % Reset \epsfxsize and \epsfysize, as documented above. |
| % |
| \global \epsfxsize = 0pt |
| \global \epsfysize = 0pt |
| }% |
| % |
| % Now we have to calculate the scale and offset values to use. |
| % First we compute the natural sizes. |
| % |
| \def \epsfsetsize |
| {% |
| \epsfrsize = \epsfury \pspoints |
| \advance \epsfrsize by -\epsflly \pspoints |
| \epsftsize = \epsfurx \pspoints |
| \advance \epsftsize by -\epsfllx \pspoints |
| % |
| % If `epsfxsize' is 0, we default to the natural size of the picture. |
| % Otherwise we scale the graph to be \epsfxsize wide. |
| % |
| \epsfxsize = \epsfsize{\epsftsize}{\epsfrsize}% |
| \ifnum \epsfxsize = 0 |
| \ifnum \epsfysize = 0 |
| \epsfxsize = \epsftsize |
| \epsfysize = \epsfrsize |
| \epsfrsize = 0pt |
| % |
| % We have a sticky problem here: TeX doesn't do floating point arithmetic! |
| % Our goal is to compute y = rx/t. The following loop does this reasonably |
| % fast, with an error of at most about 16 sp (about 1/4000 pt). |
| % |
| \else |
| \epsftmp = \epsftsize |
| \divide \epsftmp by \epsfrsize |
| \epsfxsize = \epsfysize |
| \multiply \epsfxsize by \epsftmp |
| \multiply \epsftmp by \epsfrsize |
| \advance \epsftsize by -\epsftmp |
| \epsftmp = \epsfysize |
| \loop |
| \advance \epsftsize by \epsftsize |
| \divide \epsftmp by 2 |
| \ifnum \epsftmp > 0 |
| \ifnum \epsftsize < \epsfrsize |
| \else |
| \advance \epsftsize -\epsfrsize |
| \advance \epsfxsize \epsftmp |
| \fi |
| \repeat |
| \epsfrsize = 0pt |
| \fi |
| \else |
| \ifnum \epsfysize = 0 |
| \epsftmp = \epsfrsize |
| \divide \epsftmp by \epsftsize |
| \epsfysize = \epsfxsize |
| \multiply \epsfysize by \epsftmp |
| \multiply \epsftmp by \epsftsize |
| \advance \epsfrsize by -\epsftmp |
| \epsftmp = \epsfxsize |
| \loop |
| \advance \epsfrsize by \epsfrsize |
| \divide \epsftmp by 2 |
| \ifnum \epsftmp > 0 |
| \ifnum \epsfrsize < \epsftsize |
| \else |
| \advance \epsfrsize by -\epsftsize |
| \advance \epsfysize by \epsftmp |
| \fi |
| \repeat |
| \epsfrsize = 0pt |
| \else |
| \epsfrsize = \epsfysize |
| \fi |
| \fi |
| }% |
| % |
| % Issue some status messages if the user requested them |
| % |
| \def \epsfstatus #1{% arg = filename |
| \ifepsfverbose |
| \immediate \write16 {#1: BoundingBox: |
| llx = \epsfllx \space lly = \epsflly \space |
| urx = \epsfurx \space ury = \epsfury \space}% |
| \immediate \write16 {#1: scaled width = \the\epsfxsize \space |
| scaled height = \the\epsfysize}% |
| \fi |
| }% |
| % |
| % We still need to define the tricky \epsfaux macro. This requires |
| % a couple of magic constants for comparison purposes. |
| % |
| {\catcode`\%=12 \global \let \epsfpercent=%\global \def \epsfbblit {%BoundingBox}}% |
| \global \def \epsfatend{(atend)}% |
| % |
| % So we're ready to check for `%BoundingBox:' and to grab the |
| % values if they are found. |
| % |
| % If we find a line |
| % |
| % %%BoundingBox: (atend) |
| % |
| % then we ignore it, but set a flag to force parsing all of the |
| % file, so the last %%BoundingBox parsed will be the one used. This |
| % is necessary, because EPS files can themselves contain other EPS |
| % files with their own %%BoundingBox comments. |
| % |
| % If we find a line |
| % |
| % %%BoundingBox: llx lly urx ury |
| % |
| % then we save the 4 values in \epsfllx, \epsflly, \epsfurx, \epsfury. |
| % Then, if we have not previously parsed an (atend), we flag completion |
| % and can stop reading the file. Otherwise, we must keep on reading |
| % to end of file so that we find the values on the LAST %%BoundingBox. |
| \long \def \epsfaux#1#2:#3\\% |
| {% |
| \def \testit {#2}% % save second character up to just before colon |
| \ifx#1\epsfpercent % then first char is percent (quick test) |
| \ifx \testit \epsfbblit % then (slow test) we have %%BoundingBox |
| \epsfgrab #3 . . . \\% |
| \ifx \epsfllx\epsfatend % then ignore %%BoundingBox: (atend) |
| \global \epsfatendtrue |
| \else % else found %%BoundingBox: llx lly urx ury |
| \ifepsfatend % then keep parsing ALL %%BoundingBox lines |
| \else % else stop after first one parsed |
| \epsffileokfalse |
| \fi |
| \global \epsfbbfoundtrue |
| \fi |
| \fi |
| \fi |
| }% |
| % |
| % Here we grab the values and stuff them in the appropriate definitions. |
| % |
| \def \epsfempty {}% |
| \def \epsfgrab #1 #2 #3 #4 #5\\{% |
| \global \def \epsfllx {#1}\ifx \epsfllx\epsfempty |
| \epsfgrab #2 #3 #4 #5 .\\\else |
| \global \def \epsflly {#2}% |
| \global \def \epsfurx {#3}\global \def \epsfury {#4}\fi |
| }% |
| % |
| % We default the epsfsize macro. |
| % |
| \def \epsfsize #1#2{\epsfxsize}% |
| % |
| % Finally, another definition for compatibility with older macros. |
| % |
| \let \epsffile = \epsfbox |
| \endinput |