diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /obsolete/macros/latex209/contrib/epsfig |
Initial commit
Diffstat (limited to 'obsolete/macros/latex209/contrib/epsfig')
-rw-r--r-- | obsolete/macros/latex209/contrib/epsfig/README.unix | 43 | ||||
-rw-r--r-- | obsolete/macros/latex209/contrib/epsfig/epsbb | 68 | ||||
-rw-r--r-- | obsolete/macros/latex209/contrib/epsfig/epsfig | 62 | ||||
-rw-r--r-- | obsolete/macros/latex209/contrib/epsfig/epsfig.2e | 1337 | ||||
-rw-r--r-- | obsolete/macros/latex209/contrib/epsfig/epsfig.sty | 1137 | ||||
-rw-r--r-- | obsolete/macros/latex209/contrib/epsfig/makefile | 28 |
6 files changed, 2675 insertions, 0 deletions
diff --git a/obsolete/macros/latex209/contrib/epsfig/README.unix b/obsolete/macros/latex209/contrib/epsfig/README.unix new file mode 100644 index 0000000000..788eff6e07 --- /dev/null +++ b/obsolete/macros/latex209/contrib/epsfig/README.unix @@ -0,0 +1,43 @@ +REQUIREMENTS + + o Perl + o GNU gunzip. + o UNIX (maybe). + +INSTALLATION. + + o Edit the Makefile installation paths. + o Edit the config variables at the beginning of the perl scripts "epsfig" + and "epsbb". + o Type 'make install' (or 'make -n install' to see what its gonna do). + +MANIFEST + + o README -- you're reading it. + o Makefile -- just does installation. + o epsbb -- will construct *.bb files, and compress ps files either + individually or for a whole directory. + o epsfig -- Used by dvips. Will try to find file on TEXINPUTS path + print that file to stdout. Will gnuzip where necessary. + o epsfig.sty -- slightly modified version incorporating epsfig. By default + epsbb will be applied to the \epsfig files when dvips is + run. This can be turned off with the control sequence + \psnocompress and on again with \pscompress. + +DOCUMENTATION + + Minimal. See above, read the beginning comments in the perl scripts, and + the comments in epsfig.sty. + +PROBLEMS + + I really hacked this up quickly because I some problems with the way + decompression was implemented in the original epsfig.sty. It seems to work + on our setup but no guarantees. + + Suggestions, comments regarding the decompressions stuff mail me: + peta@mcrcim.mcgill.edu (Peter Whaite). + + I wouldn't have a clue about any of the other epsfig.sty things. Best mail + the author: rahtz@dxcern.cern.ch (Sebastian Rahtz). + diff --git a/obsolete/macros/latex209/contrib/epsfig/epsbb b/obsolete/macros/latex209/contrib/epsfig/epsbb new file mode 100644 index 0000000000..8e8fbccab1 --- /dev/null +++ b/obsolete/macros/latex209/contrib/epsfig/epsbb @@ -0,0 +1,68 @@ +#!/usr/local/bin/perl +# +# Extract Bounding Box *.bb and compress postscript figure files. +# +# usage: epsbb --- For all files in the current directory. +# epsbb DIR --- For all files in the directory DIR. +# epsbb FILES... --- For all the FILES on the command line +# +# Author: Peter Whaite (peta@mcrcim.mcgill.edu) +# Centre for Intelligent Machines, McGill University. +$RCSVERSION='$Id: epsbb,v 1.2 1993/09/05 20:16:45 peta Exp $'; + +## USER CONFIG -- edit the following to suit your system. +# +$GZIP='/usr/local/bin/gzip'; +$ZCAT='/usr/local/bin/gunzip -c'; +# +## END USER CONFIG + +@ARGV=<*> unless ($#ARGV>=0); # epsbb +@ARGV=<$ARGV[0]/*> if ($#ARGV==0 && (-d $ARGV[0])); # epsbb DIR + +FILE: while ($_=shift) +{ + /\.bb$/ && next; + -e ($eps=$_) || -e ($eps="$_.gz") || -e ($eps="$_.z") || -e ($eps="$_.Z") + || do { warn("$_ does not exist\n"); next;}; + -f $eps || do { warn("$eps not a plain file\n"); next;}; + $epsf = $eps; + $compressed = 0; + $eps =~ /^(.*)\.(gz|z|Z)$/ && do + { + $eps = $1; + $epsf = "$ZCAT $eps|"; + $compressed = 1; + }; + + open(EPS,$epsf) || do {warn("$0: $epsf: $!\n"); next;}; + while (<EPS>) + { + /^%[%\w]*BoundingBox/ && do + { + open(BB,">$eps.bb") || do + { + warn("$0: $eps.bb: $!\n"); + next FILE; + }; + print STDERR "Writing $eps.bb"; + print BB; + close BB; + if (!$compressed) + { + print STDERR ", compressing $eps..."; + system("$GZIP $eps") unless $compressed; + } + print STDERR "\n"; + close EPS; + next FILE; + }; + }; + close EPS; + warn("$eps has no bounding box\n"); +} + +# Local Variables: +# mode: perl +# auto-fill-hook: do-auto-fill +# End: diff --git a/obsolete/macros/latex209/contrib/epsfig/epsfig b/obsolete/macros/latex209/contrib/epsfig/epsfig new file mode 100644 index 0000000000..71d39bc1ce --- /dev/null +++ b/obsolete/macros/latex209/contrib/epsfig/epsfig @@ -0,0 +1,62 @@ +#!/usr/local/bin/perl +# +# usage: epsfig [-c] FILE +# +# Write (possibly compressed) epsfig FILE to stdout. The TEXINPUTS path is +# searched for FILE{,.gz,z,Z}. With the -c option the FILE is gziped and +# FILE.bb is generated. If FILE is in the system default $SYSTEXINPUTS path +# no attempt is made to epsbb it. +# +# Used by epsfig.sty inside backquoted dvips specials. +# +# Author: Peter Whaite (peta@mcrcim.mcgill.edu) +# Centre for Intelligent Machines, McGill University. +# $Id: epsfig,v 1.3 1993/09/13 22:55:00 peta Exp $ + +## USER CONFIG -- edit the following to suit your system. +# +$SYSTEXINPUTS='.:/usr/local/tex/lib/texinputs'; +$ZCAT='/usr/local/bin/gunzip -c'; +# +## END USER CONFIG + +while ($_=shift,/^-/) +{ + /^-c/ && do {$compress++;next}; + die "$0: bad option $_\nusage: $0 [-c] <file>\n"; +} +die "usage: $0 [-c] <file>\n" unless $#ARGV == -1; +$file=$_; + +$TEXINPUTS=$ENV{'TEXINPUTS'}; +$TEXINPUTS .= $SYSTEXINPUTS if ((! $TEXINPUTS)||($TEXINPUTS =~ /:$/)); +@SYSTEXINPUTS = split(/:/,$SYSTEXINPUTS); +@TEXINPUTS = split(/:/,$TEXINPUTS); + +foreach $dir (@TEXINPUTS) +{ + $epsf = "$dir/$file"; + (-f $epsf) && do {$cmd = "$epsf"; $uncompressed=1; last;}; + (-f "$epsf.gz") && do {$cmd="$ZCAT $epsf|"; last;}; + (-f "$epsf.z") && do {$cmd="$ZCAT $epsf|"; last;}; + (-f "$epsf.Z") && do {$cmd= "$ZCAT $epsf|"; last;}; +} +$cmd || die("$0: $file.{z,gz,Z} not found\n"); + +open(EPSF,$cmd) || die("$0: $cmd: $!\n"); +while (<EPSF>) +{ + print; +} +close EPSF; + +if ($compress && $uncompressed) +{ + exit(0) if (grep(/^$dir$/,@SYSTEXINPUTS) && ($dir =~ m#^/#)); + system("epsbb $epsf"); +}; + +# Local Variables: +# mode: perl +# auto-fill-hook: do-auto-fill +# End: diff --git a/obsolete/macros/latex209/contrib/epsfig/epsfig.2e b/obsolete/macros/latex209/contrib/epsfig/epsfig.2e new file mode 100644 index 0000000000..3e86ec981b --- /dev/null +++ b/obsolete/macros/latex209/contrib/epsfig/epsfig.2e @@ -0,0 +1,1337 @@ +%---------------------------------------------- +\NeedsTeXFormat{LaTeX2e} +\def\fileversion{2}% +\def\filedate{1994/01/25}% +\ProvidesPackage{epsfig}[\filedate] +\message{ Epsfig } +% minimal reworking for LaTeX2e! +% +% this will be all be rewritten when the LaTeX2e includegraphics +% comes out. +% +% SPQR Jan 94 +% +%%%-------------------------------------------------------------------- +%%% psfig merged with EPSF = epsfig Release 1 +%%% 1.0 November 91 +%%% 1.1 Dec 91 fixed some bugs +%%% 1.2 Jan 92 fixed bug that it never stopped reading PS file until +%%% it reached the end! merged in changes from psfig1.8 +%%% (plain TeX definition of \fbox, new code for rotation) +%%% 1.3 Jan 92 separated out \special code so that dvitops can be +%%% supported. use \psfigdriver{dvitops}% +%%% 1.4 Jan 92 fixed dvitops. need to input psfig at different point +%%% in dvips from dvitops. define \psfig@start and \psfig@end to cope +%%% with this +%%% 1.5 Jan 92 force use of psfig method if using dvitops +%%% 1.6 May 92 fixed bugs +%%% 1.7 Sep 92 added support for emtex, sort of. reads a .bb file +%%% and imports .pcx file. Boolean flag \epsfigdos used +%%% to indicate that we cannot have more than one . in the +%%% suffix (ie we will look at file.bb not file.eps.bb) +%%% +%%% 1.8 Sep 92 added support for OzTeX; fixed bugs in dvips support +%%% (including clipping to bounding box); removed use of dimen100. +%%% +%%% 1.9 Dec 92 cleaned up documentation again +%%% 1.10 Mar 93 cleaned up for plain TeX +%%% 1.11 Mar 93 merged in changes by Peter Galko (supplied by CERN) for +%%% use with Textures +%%% 1.12 Apr 93 actually *tested* the Textures additions, and so rewrote +%%% from scratch (borrowed an idea from psbox) +%%% 1.13 May 93 allow for file names with _ or $ in them in \psdraft, and +%%% fix problem that occurred with missing BoundingBox +%%% 1.14 May 93 allow for .z suffix +%%% 1.15 July 93 allow for .gz suffix +%%% use \leavevmode as appropriate +%%% fix plain \TeX mode +%%% (fixes from Peter-Klaus Schilling <R02SCH@DSYIBM.DESY.DE>) +%%% 1.16 August 93 [peta@mcrcim.mcgill.edu (Peter Whaite)] +%%% -- Implement Perl scripts to do compressed file inclusion and bb +%%% generation. +%%% -- Add \pscompress. +%%% -- Tidy up comments. +%%% 1.17 September 93 SPQR +%%% better code for literal name printing +%%% allowed for spaces around , and = +%%% 1.18 17.9.93 +%%% updates to epsbb and epsfig from Peter W +%%% 1.19 14.11.93 +%%% mistaken placement of calculation of EPS@Height resulted in errors +%%% +%-------------------------------------------------------- +%%% +%%% code rearranged by Sebastian Rahtz (spqr@uk.ac.york.minster) +%%% from work by +%%% Trevor Darrell; Tom Rokicki; Daniel Smith; H. Payne, Robert Russell +%%% +%%% This is a version of Darrell's `psfig' macros which are designed +%%% to be used with dvips or dvitops, and the `epsf' macros (these are +%%% automaticaly included by the style file). I did this because the +%%% \special commands used by `epsf' appear to be more robust and +%%% portable than the raw \specials used by `psfig', but I preferred +%%% the psfig interface. This system preserves the psfig interface, +%%% but mainly uses epsf macros to carry out the job. The user +%%% interface is identical to \psfig, but you just use \epsfig +%%% instead. Rotation uses the original psfig macros: I could not work +%%% out how to do rotation with the epsf macros. +%%% +%%% The same applies to `rheight' and `rwidth' +%%% +%%% If you *really* want old psfig behaviour regardless, use \psfig. It is +%%% still there. Some of the features have gone, however. \figurepath +%%% seemed redundant, since it could be controlled by the TEXINPUTS +%%% variable anyway. +%%% +%%% As an added feature, if FILE cannot be found, a file called FILE.bb +%%% is searched for. This should simply contain a %%BoundingBox line. A perl +%%% script "epsbb" is provided to generate these automatically. It is +%%% assumed that if this exists, then the actual postscript is in UNIX +%%% compress format in FILE.Z or in GNU gzip format in FILE.gz or FILE.z. +%%% +%%% The macros then read the BB from FILE.bb, but insert "`epsfig FILE`" in +%%% the output for dvips to interpret (don't worry, it knows about this). +%%% "Epsfig" is another perl script which searches the TEXINPUTS path for +%%% FILE or FILE.{gz,z,Z}. +%%% +%%% As an added bonus if you say \pscompress the -c switch will be passed to +%%% epsfig, causing automatic FILE.bb generation and compression the first +%%% time dvips is run. Files in the system directories will NOT be +%%% compressed. +%%% If you are *not* on a Unix system and use this, deliberately or by +%%% mischance, you will have problems! +%%% +%%% This file can be included in a dumped format, or used as a LaTeX +%%% style file, or used in plain TeX. It does not load itself twice (I hope) +%%% +%-------------------------------------------------------------------- +%-------------------------------------------------------------------- +%%% previous notes. this copy of psfig.tex inherited from versions 1.8 +%-------------------------------------------------------------------- +%%% All psfig/tex software, documentation, and related files +%%% in this distribution of psfig/tex are +%%% Copyright 1987, 1988, 1991 Trevor J. Darrell +% +%%% Permission is granted for use and non-profit distribution of psfig/tex +%%% providing that this notice be clearly maintained. The right to +%%% distribute any portion of psfig/tex for profit or as part of any commercial +%%% product is specifically reserved for the author(s) of that portion. +%%% +%%% Thanks to Greg Hager (GDH) and Ned Batchelder for their contributions +%%% to this project. +%%%-------------------------------------------------------------------------- +%%% GDH 7/26/87 -- changed so that it first looks in the local directory, +%%% then in a specified global directory for the ps file. +%%% SPQR 12/91 removed that last change. it follows TEXINPUTS anyway +%%% RPR 6/25/91 -- changed so that it defaults to user-supplied name if +%%% boundingbox info is specified, assuming graphic will be created by +%%% print time. +%%% SPQR 12/91 removed that last change. use LaTeX error message instead +%%% SPQR 12/91 -- `no file found' produces LaTeX error message. +%%% If you recover from that the file name is set in draft +%%% mode in place of the file. +%%% +%%% Modified by J. Daniel Smith on 9 October 1990 to accept the +%%% %%BoundingBox: comment with or without a space after the colon. Stole +%%% file reading code from Tom Rokicki's EPSF.TEX file (see below). +%%% --- SPQR 12.91 removed most of this to use epsf directly +%%% +%%% More modifications by J. Daniel Smith on 29 March 1991 to allow the +%%% the included PostScript figure to be rotated. The amount of +%%% rotation is specified by the "angle=" parameter of the \epsfig command. +%%% +%%% Modified by Robert Russell on June 25, 1991 to allow users to specify +%%% .ps filenames which don't yet exist, provided they explicitly provide +%%% boundingbox information via the \epsfig command. Note: This will only work +%%% if the "file=" parameter follows all four "bb???=" parameters in the +%%% command. This is due to the order in which psfig interprets these params. +%%% ---- SPQR 12.91 removed all this +%%% +%%% 3 Jul 1991 JDS check if file already read in once +%%% +%-----------------------------USAGE--------------------------------------- +% From: gvr@cs.brown.edu (George V. Reilly) +% +% \psdraft draws an outline box, but doesn't include the figure +% in the DVI file. Useful for previewing. +% +% \psfull includes the figure in the DVI file (default). +% +% \psscalefirst width= or height= specifies the size of the figure +% before rotation. +% \psrotatefirst (default) width= or height= specifies the size of the +% figure after rotation. Asymetric figures will +% appear to shrink. +% +% usage: \epsfig{file=, figure=, height=, width=, +% bbllx=, bblly=, bburx=, bbury=, +% rheight=, rwidth=, clip=, angle=, silent=}% +% +% "file" is the filename. If no path name is specified and the +% file is not found in the current directory, +% it will be looked for in directory \psfigurepath. +% "figure" is a synonym for "file". +% By default, the width and height of the figure are taken from +% the BoundingBox of the figure. +% If "width" is specified, the figure is scaled so that it has +% the specified width. Its height changes proportionately. +% If "height" is specified, the figure is scaled so that it has +% the specified height. Its width changes proportionately. +% If both "width" and "height" are specified, the figure is scaled +% anamorphically. +% "bbllx", "bblly", "bburx", and "bbury" control the PostScript +% BoundingBox. +% "rheight" and "rwidth" are the reserved height and width +% of the figure, i.e., how big TeX actually thinks +% the figure is. They default to "width" and "height". +% The "clip" option ensures that no portion of the figure will +% appear outside its BoundingBox. "clip=" is a switch and +% takes no value, but the `=' must be present. +% The "angle" option specifies the angle of rotation (degrees, ccw). +% The "silent" option makes \psfig work silently. +% +%-------------------------------------------------------------------------- +%%% if this is true, the original Darrell macros and specials are used +\newif\ifuse@psfig +\use@psfigtrue +\newcount\EPS@Height \newcount\EPS@Width \newcount\EPS@xscale +\newcount\EPS@yscale +\def\psfig@start{\typeout{EPSFIG - driver}} +\def\psfig@end{\typeout{EPSFIG - driver}} +\def\epsfig@gofer{\typeout{EPSFIG - driver}} +\newcount\fig@driver +\DeclareOption{ln03}{ +\typeout{WARNING! **** + no specials for LN03 epsfig}% +} +\DeclareOption{dvitops}{% + \use@psfigtrue + \def\psfig@start{}% + \def\psfig@end{\special{dvitops: import \@p@sfilefinal \space + \@p@swidth sp \space \@p@sheight sp \space fill}% + \if@clip \typeout{Clipping not supported}\fi + \if@angle \typeout{Rotating not supported}\fi} + \let\epsfig@gofer\psfig@end +} + +\DeclareOption{dvips}{% + \message{(dvips)}% + \use@psfigfalse + \def\psfig@start{ + \message{ what are \@p@swidth, and \@p@sheight}% + \special{ps::[begin] \@p@swidth \space \@p@sheight \space% + \@p@sbbllx \space \@p@sbblly \space% + \@p@sbburx \space \@p@sbbury \space% + startTexFig \space }% + \if@angle + \special {ps:: \@p@sangle \space rotate \space} + \fi + \if@clip + \if@verbose + \typeout{(clipped to BB) }% + \fi + \special{ps:: doclip \space }% + \fi + \special{ps: plotfile \@p@sfilefinal \space }% + \special{ps::[end] endTexFig \space }% + }% + \def\psfig@end{}% + \def\epsfig@gofer{ + \if@clip + \if@verbose + \typeout{(clipped to BB)}% + \fi + \epsfclipon + \fi + \epsfsetgraph{\@p@sfilefinal}% + } +} + +\DeclareOption{emtex}{% + \use@psfigtrue + \fig@driver3 + \Typeout{WARNING. You must have a .bb info file with the Bounding Box + of the pcx file}% + \def\psfig@start{}% + % when emtex imports a pcx file, it is *below* where we are now. + % so raise the box + \def\psfig@end{\typeout{pcx import of \@p@sfilefinal}% + \if@clip \typeout{Clipping not supported}\fi + \if@angle \typeout{Rotating not supported}\fi + \raisebox{\@p@srheight sp}{\special{em: graph \@p@sfilefinal}}}% + \def\epsfig@gofer{}% +} + +\DeclareOption{oztex}{% + \use@psfigtrue + \message{(OzTeX)}% + \def\psfig@start{}% + \def\psfig@end{% + \EPS@Width\@p@swidth + \EPS@Height\@p@sheight + \divide\EPS@Width by 65781 % convert sp to bp + \divide\EPS@Height by 65781 + \special{epsf=\@p@sfilefinal + \space + width=\the\EPS@Width + \space + height=\the\EPS@Height + }% + \if@clip \typeout{Clipping not supported}\fi + \if@angle \typeout{Rotating not supported}\fi + }% + \let\epsfig@gofer\psfig@end +} +\DeclareOption{textures}{% + \message{(Textures)}% + \use@psfigtrue + \def\psfig@end{ + % what is scaling of picture + \EPS@Width=\@bbw + \divide\EPS@Width by 1000 + \EPS@xscale=\@p@swidth \divide \EPS@xscale by \EPS@Width + \EPS@Height=\@bbh + \divide\EPS@Height by 1000 + \EPS@yscale=\@p@sheight \divide \EPS@yscale by\EPS@Height + % take largest calculated scale + \ifnum\EPS@xscale>\EPS@yscale\EPS@xscale=\EPS@yscale\fi + \if@clip + \if@verbose + \typeout{(clipped to BB)}% + \fi + \epsfclipon + \fi + \special{illustration \@p@sfilefinal\space scaled \the\EPS@xscale}% + }% + \def\psfig@start{}% +} +\ProcessOptions + +% copies of bits of LaTeX we need.... +\newdimen\ps@dimcent +% +% \fbox is defined in latex.tex; so if \fbox is undefined, assume that +% we are not in LaTeX. +% Perhaps this could be done better??? +\ifx\undefined\fbox +% \fbox code from modified slightly from LaTeX +\newdimen\fboxrule +\newdimen\fboxsep +\newdimen\ps@tempdima +\newbox\ps@tempboxa +\fboxsep = 0pt +\fboxrule = .4pt +\long\def\fbox#1{\leavevmode\setbox\ps@tempboxa\hbox{#1}\ps@tempdima\fboxrule + \advance\ps@tempdima \fboxsep \advance\ps@tempdima \dp\ps@tempboxa + \hbox{\lower \ps@tempdima\hbox + {\vbox{\hrule height \fboxrule + \hbox{\vrule width \fboxrule \hskip\fboxsep + \vbox{\vskip\fboxsep \box\ps@tempboxa\vskip\fboxsep}\hskip + \fboxsep\vrule width \fboxrule}% + \hrule height \fboxrule}}}}% +\fi +\ifx\@ifundefined\undefined +\long\def\@ifundefined#1#2#3{\expandafter\ifx\csname + #1\endcsname\relax#2\else#3\fi}% +\fi +% +\@ifundefined{typeout}% +{\gdef\typeout#1{\immediate\write\sixt@@n{#1}}}% +{\relax}% +% +%%% check to see if macros already loaded in (maybe some other file says +%%% "\input epsfig") ... +\@ifundefined{epsfig}{}{\typeout{EPSFIG --- already loaded}\endinput}% +% +%%% +%%% we need Rokicki's EPSF macros anyway: +% +% EPSF.TEX macro file: +% Written by Tomas Rokicki of Radical Eye Software, 29 Mar 1989. +% Revised by Don Knuth, 3 Jan 1990. +% Revised by Tomas Rokicki to accept bounding boxes with no +% space after the colon, 18 Jul 1990. +% +% TeX macros to include an Encapsulated PostScript graphic. +% 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 with the center environment of LaTeX, preface the \epsffile +% call with a \leavevmode. (LaTeX should probably supply this itself +% for the center environment.) +% +% To use, simply say +% \input epsf % somewhere early on in your TeX file +% \epsfbox{filename.ps} % where you want to insert a vbox for a figure +% +% Alternatively, you can type +% +% \epsfbox[0 0 30 50]{filename.ps} % to supply your own BB +% +% which 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 saying +% \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 proportiontally). The +% width (and height) is restored to zero after each use. +% +% 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), say `\epsfverbosetrue'. +% +\newread\epsffilein % file to \read +\newif\ifepsffileok % continue looking for the bounding box? +\newif\ifepsfbbfound % success? +\newif\ifepsfverbose % report what you're making? +\newif\ifepsfdraft % use draft mode? +\newdimen\epsfxsize % horizontal size after scaling +\newdimen\epsfysize % vertical size after scaling +\newdimen\epsftsize % horizontal size before scaling +\newdimen\epsfrsize % vertical size before scaling +\newdimen\epsftmp % register for arithmetic manipulation +\newdimen\pspoints % conversion factor +% +\pspoints=1bp % Adobe points are `big' +\epsfxsize=0pt % Default value, means `use natural size' +\epsfysize=0pt % ditto +% +\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}}% +% +\def\epsfgetlitbb#1#2 #3 #4 #5]#6{\epsfgrab #2 #3 #4 #5 .\\% + \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 +\ifeof\epsffilein\errmessage{I couldn't open #1, will ignore it}\else +% +% Okay, we got it. Now we'll scan lines until we find one that doesn't +% start with %. We're looking for the bounding box comment. +% + {\epsffileoktrue \chardef\other=12 + \def\do##1{\catcode`##1=\other}\dospecials \catcode`\ =10 + \loop + \read\epsffilein to \epsffileline + \ifeof\epsffilein\epsffileokfalse\else +% +% We check to see if the first character is a % sign; +% if not, we stop reading (unless the line was entirely blank); +% if so, we look further and stop only if the line begins with +% `%%BoundingBox:'. +% + \expandafter\epsfaux\epsffileline:. \\% + \fi + \ifepsffileok\repeat + \ifepsfbbfound\else + \ifepsfverbose\message{No bounding box comment in #1; using defaults}\fi\fi + }\closein\epsffilein\fi}% +% +% Now we have to calculate the scale and offset values to use. +% First we compute the natural sizes. +% +\def\epsfclipon{\def\epsfclipstring{ clip}}% +\def\epsfclipoff{\def\epsfclipstring{\ifepsfdraft\space clip\fi}}% +\epsfclipoff +% +\def\epsfsetgraph#1{% + \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\epsfrsize + \epsfxsize=\epsfysize \multiply\epsfxsize\epsftmp + \multiply\epsftmp\epsfrsize \advance\epsftsize-\epsftmp + \epsftmp=\epsfysize + \loop \advance\epsftsize\epsftsize \divide\epsftmp 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\epsftsize + \epsfysize=\epsfxsize \multiply\epsfysize\epsftmp + \multiply\epsftmp\epsftsize \advance\epsfrsize-\epsftmp + \epsftmp=\epsfxsize + \loop \advance\epsfrsize\epsfrsize \divide\epsftmp 2 + \ifnum\epsftmp>0 + \ifnum\epsfrsize<\epsftsize\else + \advance\epsfrsize-\epsftsize \advance\epsfysize\epsftmp \fi + \repeat + \epsfrsize=0pt + \else + \epsfrsize=\epsfysize + \fi + \fi +% +% Finally, we make the vbox and stick in a \special that dvips can parse. +% + \ifepsfverbose\message{#1: width=\the\epsfxsize, height=\the\epsfysize}\fi + \epsftmp=10\epsfxsize \divide\epsftmp\pspoints + \vbox to\epsfysize{\vfil\hbox to\epsfxsize{% + \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 + \epsfclipstring}% + \else + \epsfrsize=10\epsfysize \divide\epsfrsize\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 + \hfil}}% +\global\epsfxsize=0pt\global\epsfysize=0pt}% +% +% 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}}% +% +% So we're ready to check for `%BoundingBox:' and to grab the +% values if they are found. +% +\long\def\epsfaux#1#2:#3\\{\ifx#1\epsfpercent + \def\testit{#2}\ifx\testit\epsfbblit + \epsfgrab #3 . . . \\% + \epsffileokfalse + \global\epsfbbfoundtrue + \fi\else\ifx#1\par\else\epsffileokfalse\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 + +% +%% SPQR 12.91 handling of errors using standard LaTeX error +%% mechanism. In case we are plain TeX we first define the +%% error routines... +\ifx\undefined\@latexerr + \newlinechar`\^^J + \def\@spaces{\space\space\space\space}% + \def\@latexerr#1#2{% + \edef\@tempc{#2}\expandafter\errhelp\expandafter{\@tempc}% + \typeout{Error. \space see a manual for explanation.^^J + \space\@spaces\@spaces\@spaces Type \space H <return> \space for + immediate help.}\errmessage{#1}}% +\fi +%------------------------ +%% a couple of LaTeX error messages +\def\@whattodo{You tried to include a PostScript figure which +cannot be found^^JIf you press return to carry on anyway,^^J +The failed name will be printed in place of the figure.^^J +or type X to quit}% +\def\@whattodobb{You tried to include a PostScript figure which +has no^^Jbounding box, and you supplied none.^^J +If you press return to carry on anyway,^^J +The failed name will be printed in place of the figure.^^J +or type X to quit}% +%------------------------ +% +%------------------------------------------------------------------------ +%------------------------------------------------------------------------ +%%% @psdo control structure -- similar to Latex @for. +%%% I redefined these with different names so that psfig can +%%% be used with TeX as well as LaTeX, and so that it will not +%%% be vunerable to future changes in LaTeX's internal +%%% control structure, +% +\def\@nnil{\@nil}% +\def\@empty{}% +\def\@psdonoop#1\@@#2#3{}% +\def\@psdo#1:=#2\do#3{\edef\@psdotmp{#2}\ifx\@psdotmp\@empty \else + \expandafter\@psdoloop#2,\@nil,\@nil\@@#1{#3}\fi}% +\def\@psdoloop#1,#2,#3\@@#4#5{\def#4{#1}\ifx #4\@nnil \else + #5\def#4{#2}\ifx #4\@nnil \else#5\@ipsdoloop #3\@@#4{#5}\fi\fi}% +\def\@ipsdoloop#1,#2\@@#3#4{\def#3{#1}\ifx #3\@nnil + \let\@nextwhile=\@psdonoop \else + #4\relax\let\@nextwhile=\@ipsdoloop\fi\@nextwhile#2\@@#3{#4}}% +\def\@tpsdo#1:=#2\do#3{\xdef\@psdotmp{#2}\ifx\@psdotmp\@empty \else + \@tpsdoloop#2\@nil\@nil\@@#1{#3}\fi}% +\def\@tpsdoloop#1#2\@@#3#4{\def#3{#1}\ifx #3\@nnil + \let\@nextwhile=\@psdonoop \else + #4\relax\let\@nextwhile=\@tpsdoloop\fi\@nextwhile#2\@@#3{#4}}% +%%% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% file reading stuff from epsf.tex +%%% EPSF.TEX macro file: +%%% Written by Tomas Rokicki of Radical Eye Software, 29 Mar 1989. +%%% Revised by Don Knuth, 3 Jan 1990. +%%% Revised by Tomas Rokicki to accept bounding boxes with no +%%% space after the colon, 18 Jul 1990. +%%% Portions modified/removed for use in PSFIG package by +%%% J. Daniel Smith, 9 October 1990. +%%% Just the bit which knows about (atend) as a BoundingBox +% +%%% hacked back a bit by SPQR 12/91 +% +\long\def\epsfaux#1#2:#3\\{\ifx#1\epsfpercent + \def\testit{#2}\ifx\testit\epsfbblit + \@atendfalse + \epsf@atend #3 . \\% + \if@atend + \if@verbose + \typeout{epsfig: found `(atend)'; continuing search}% + \fi + \else + \epsfgrab #3 . . . \\% + \epsffileokfalse\global\no@bbfalse + \global\epsfbbfoundtrue + \fi + \fi\fi}% +% +%%% Determine if the stuff following the %%BoundingBox is `(atend)' +%%% J. Daniel Smith. Copied from \epsf@grab above. +% +\def\epsf@atendlit{(atend)} +% +\def\epsf@atend #1 #2 #3\\{% + \def\epsf@tmp{#1}\ifx\epsf@tmp\empty + \epsf@atend #2 #3 .\\\else + \ifx\epsf@tmp\epsf@atendlit\@atendtrue\fi\fi}% + + +%%% End of file reading stuff from epsf.tex +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% trigonometry stuff from "trig.tex" +\chardef\trig@letter = 11 +\chardef\other = 12 + +\newif\ifdebug %%% turn me on to see TeX hard at work ... +\newif\ifc@mpute %%% don't need to compute some values +\newif\if@atend +\c@mputetrue % but assume that we do + +\let\then = \relax +\def\r@dian{pt }% +\let\r@dians = \r@dian +\let\dimensionless@nit = \r@dian +\let\dimensionless@nits = \dimensionless@nit +\def\internal@nit{sp }% +\let\internal@nits = \internal@nit +\newif\ifstillc@nverging +\def \Mess@ge #1{\ifdebug \then \message {#1} \fi}% + +{ %%% Things that need abnormal catcodes %%% + \catcode `\@ = \trig@letter + \gdef \nodimen {\expandafter \n@dimen \the \dimen}% + \gdef \term #1 #2 #3% + {\edef \t@ {\the #1}%%% freeze parameter 1 (count, by value) + \edef \t@@ {\expandafter \n@dimen \the #2\r@dian}% + %%% freeze parameter 2 (dimen, by value) + \t@rm {\t@} {\t@@} {#3}% + }% + \gdef \t@rm #1 #2 #3% + {{% + \count 0 = 0 + \dimen 0 = 1 \dimensionless@nit + \dimen 2 = #2\relax + \Mess@ge {Calculating term #1 of \nodimen 2}% + \loop + \ifnum \count 0 < #1 + \then \advance \count 0 by 1 + \Mess@ge {Iteration \the \count 0 \space}% + \Multiply \dimen 0 by {\dimen 2}% + \Mess@ge {After multiplication, term = \nodimen 0}% + \Divide \dimen 0 by {\count 0}% + \Mess@ge {After division, term = \nodimen 0}% + \repeat + \Mess@ge {Final value for term #1 of + \nodimen 2 \space is \nodimen 0}% + \xdef \Term {#3 = \nodimen 0 \r@dians}% + \aftergroup \Term + }}% + \catcode `\p = \other + \catcode `\t = \other + \gdef \n@dimen #1pt{#1} %%% throw away the ``pt'' +}% + +\def \Divide #1by #2{\divide #1 by #2} %%% just a synonym + +\def \Multiply #1by #2%%% allows division of a dimen by a dimen + {{%%% should really freeze parameter 2 (dimen, passed by value) + \count 0 = #1\relax + \count 2 = #2\relax + \count 4 = 65536 + \Mess@ge {Before scaling, count 0 = \the \count 0 \space and + count 2 = \the \count 2}% + \ifnum \count 0 > 32767 %%% do our best to avoid overflow + \then \divide \count 0 by 4 + \divide \count 4 by 4 + \else \ifnum \count 0 < -32767 + \then \divide \count 0 by 4 + \divide \count 4 by 4 + \else + \fi + \fi + \ifnum \count 2 > 32767 %%% while retaining reasonable accuracy + \then \divide \count 2 by 4 + \divide \count 4 by 4 + \else \ifnum \count 2 < -32767 + \then \divide \count 2 by 4 + \divide \count 4 by 4 + \else + \fi + \fi + \multiply \count 0 by \count 2 + \divide \count 0 by \count 4 + \xdef \product {#1 = \the \count 0 \internal@nits}% + \aftergroup \product + }}% + +\def\r@duce{\ifdim\dimen0 > 90\r@dian \then % sin(x) = sin(180-x) + \multiply\dimen0 by -1 + \advance\dimen0 by 180\r@dian + \r@duce + \else \ifdim\dimen0 < -90\r@dian \then % sin(x) = sin(360+x) + \advance\dimen0 by 360\r@dian + \r@duce + \fi + \fi}% + +\def\Sine#1% + {{% + \dimen 0 = #1 \r@dian + \r@duce + \ifdim\dimen0 = -90\r@dian \then + \dimen4 = -1\r@dian + \c@mputefalse + \fi + \ifdim\dimen0 = 90\r@dian \then + \dimen4 = 1\r@dian + \c@mputefalse + \fi + \ifdim\dimen0 = 0\r@dian \then + \dimen4 = 0\r@dian + \c@mputefalse + \fi +% + \ifc@mpute \then + % convert degrees to radians + \divide\dimen0 by 180 + \dimen0=3.141592654\dimen0 +% + \dimen 2 = 3.1415926535897963\r@dian %%% a well-known constant + \divide\dimen 2 by 2 %%% we only deal with -pi/2 : pi/2 + \Mess@ge {Sin: calculating Sin of \nodimen 0}% + \count 0 = 1 %%% see power-series expansion for sine + \dimen 2 = 1 \r@dian %%% ditto + \dimen 4 = 0 \r@dian %%% ditto + \loop + \ifnum \dimen 2 = 0 %%% then we've done + \then \stillc@nvergingfalse + \else \stillc@nvergingtrue + \fi + \ifstillc@nverging %%% then calculate next term + \then \term {\count 0} {\dimen 0} {\dimen 2}% + \advance \count 0 by 2 + \count 2 = \count 0 + \divide \count 2 by 2 + \ifodd \count 2 %%% signs alternate + \then \advance \dimen 4 by \dimen 2 + \else \advance \dimen 4 by -\dimen 2 + \fi + \repeat + \fi + \xdef \sine {\nodimen 4}% + }}% + +%%% Now the Cosine can be calculated easily by calling \Sine: +%%% cos(x) = sin(90-x) +\def\Cosine#1{\ifx\sine\UnDefined\edef\Savesine{\relax}\else + \edef\Savesine{\sine}\fi + {\dimen0=#1\r@dian\multiply\dimen0 by -1 + \advance\dimen0 by 90\r@dian + \Sine{\nodimen 0}% + \xdef\cosine{\sine}% + \xdef\sine{\Savesine}}} +%%% end of trig stuff +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +\def\psdraft{\def\@psdraft{0}}% +\def\psfull{\def\@psdraft{1}}% +\psfull +\newif\if@compress +\def\pscompress{\@compresstrue} +\def\psnocompress{\@compressfalse} +\@compressfalse +\newif\if@scalefirst +\def\psscalefirst{\@scalefirsttrue}% +\def\psrotatefirst{\@scalefirstfalse}% +\psrotatefirst +% +\newif\if@draftbox +\def\psnodraftbox{\@draftboxfalse}% +\@draftboxtrue +% +\newif\if@noisy +\@noisyfalse +\newif\ifno@bb +%%% These are for the option list. +%%% A specification of the form a = b maps to calling \@p@@sa{b}% +\newif\if@bbllx +\newif\if@bblly +\newif\if@bburx +\newif\if@bbury +\newif\if@height +\newif\if@width +\newif\if@rheight +\newif\if@rwidth +\newif\if@angle +\newif\if@clip +\newif\if@verbose +\newif\if@prologfile +\def\@p@@sprolog#1{\@prologfiletrue\def\@prologfileval{#1}}% +\def\@p@@sclip#1{\@cliptrue}% +% +\newif\ifepsfig@dos % only single suffix possible +\def\epsfigdos{\epsfig@dostrue}% +\epsfig@dosfalse +% +\def\ParseName#1{\expandafter\@Parse#1}% +\def\@Parse#1.#2:{\gdef\BaseName{#1}\gdef\FileType{#2}}% + +\def\@p@@sfile#1{% + \ifepsfig@dos + \ParseName{#1:}% + \else + \gdef\BaseName{#1}\gdef\FileType{}% + \fi + \def\@p@sfile{NO FILE: #1}% + \def\@p@sfilefinal{NO FILE: #1}% + \openin1=#1 + \ifeof1\closein1\openin1=\BaseName.bb + \ifeof1\closein1 + \if@bbllx % No postscript file but bb given explicitly. + \if@bblly\if@bburx\if@bbury + \def\@p@sfile{#1}% + \def\@p@sfilefinal{#1}% + \fi\fi\fi + \else % No bounding box found. + \@latexerr{ERROR. PostScript file #1 not found}\@whattodo + \@p@@sbbllx{100bp}% + \@p@@sbblly{100bp}% + \@p@@sbburx{200bp}% + \@p@@sbbury{200bp}% + \psdraft + \fi + \else % Postscript file is compressed. + \closein1% + \edef\@p@sfile{\BaseName.bb}% + \typeout{using BB from \@p@sfile}% + \ifnum\fig@driver=3 + \edef\@p@sfilefinal{\BaseName.pcx}% + \else + \ifepsfig@dos + \edef\@p@sfilefinal{"`gunzip -c `texfind \BaseName.{z,Z,gz}"}% + \else + \edef\@p@sfilefinal{"`epsfig \if@compress-c \fi#1"}% + \fi + \fi + \fi + \else\closein1 % Postscript file is not compressed. + \edef\@p@sfile{#1}% + \if@compress + \edef\@p@sfilefinal{"`epsfig -c #1"}% + \else + \edef\@p@sfilefinal{#1}% + \fi + \fi% +} + +% alternative syntax: figure= +\let\@p@@sfigure\@p@@sfile +% +\def\@p@@sbbllx#1{% + \@bbllxtrue + \ps@dimcent=#1 + \edef\@p@sbbllx{\number\ps@dimcent}% + \divide\ps@dimcent by65536 + \global\edef\epsfllx{\number\ps@dimcent}% +}% +\def\@p@@sbblly#1{% + \@bbllytrue + \ps@dimcent=#1 + \edef\@p@sbblly{\number\ps@dimcent}% + \divide\ps@dimcent by65536 + \global\edef\epsflly{\number\ps@dimcent}% +}% +\def\@p@@sbburx#1{% + \@bburxtrue + \ps@dimcent=#1 + \edef\@p@sbburx{\number\ps@dimcent}% + \divide\ps@dimcent by65536 + \global\edef\epsfurx{\number\ps@dimcent}% +}% +\def\@p@@sbbury#1{% + \@bburytrue + \ps@dimcent=#1 + \edef\@p@sbbury{\number\ps@dimcent}% + \divide\ps@dimcent by65536 + \global\edef\epsfury{\number\ps@dimcent}% +}% +\def\@p@@sheight#1{% + \@heighttrue + \global\epsfysize=#1 + \ps@dimcent=#1 + \edef\@p@sheight{\number\ps@dimcent}% +}% +\def\@p@@swidth#1{% + \@widthtrue + \global\epsfxsize=#1 + \ps@dimcent=#1 + \edef\@p@swidth{\number\ps@dimcent}% +}% +\def\@p@@srheight#1{% + \@rheighttrue\use@psfigtrue + \ps@dimcent=#1 + \edef\@p@srheight{\number\ps@dimcent}% +}% +\def\@p@@srwidth#1{% + \@rwidthtrue\use@psfigtrue + \ps@dimcent=#1 + \edef\@p@srwidth{\number\ps@dimcent}% +}% +\def\@p@@sangle#1{% + \use@psfigtrue + \@angletrue + \edef\@p@sangle{#1}% +}% +\def\@p@@ssilent#1{% + \@verbosefalse +}% +\def\@p@@snoisy#1{% + \@verbosetrue +}% +\def\@cs@name#1{\csname #1\endcsname}% +\def\@setparms#1=#2,{\@cs@name{@p@@s#1}{#2}}% +% +%%% initialize the defaults (size the size of the figure) +% +\def\ps@init@parms{% + \@bbllxfalse \@bbllyfalse + \@bburxfalse \@bburyfalse + \@heightfalse \@widthfalse + \@rheightfalse \@rwidthfalse + \def\@p@sbbllx{}\def\@p@sbblly{}% + \def\@p@sbburx{}\def\@p@sbbury{}% + \def\@p@sheight{}\def\@p@swidth{}% + \def\@p@srheight{}\def\@p@srwidth{}% + \def\@p@sangle{0}% + \def\@p@sfile{}% + \@prologfilefalse + \def\@sc{}% + \if@noisy + \@verbosetrue + \else + \@verbosefalse + \fi + \@clipfalse +}% +% +%%% Go through the options setting things up. +% +\def\parse@ps@parms#1{% + \@psdo\@psfiga:=#1\do + {\expandafter\@setparms\@psfiga,}% +\if@prologfile +\special{header=\@prologfileval}% +\fi +}% +% +%%% Compute bb height and width +% +\def\bb@missing{% + \if@verbose + \typeout{psfig: searching \@p@sfile \space for bounding box}% + \fi + \epsfgetbb{\@p@sfile}% + \ifepsfbbfound + \ps@dimcent=\epsfllx bp\edef\@p@sbbllx{\number\ps@dimcent}% + \ps@dimcent=\epsflly bp\edef\@p@sbblly{\number\ps@dimcent}% + \ps@dimcent=\epsfurx bp\edef\@p@sbburx{\number\ps@dimcent}% + \ps@dimcent=\epsfury bp\edef\@p@sbbury{\number\ps@dimcent}% + \else + \epsfbbfoundfalse + \fi +} +% +% rotate point (#1,#2) about (0,0). +% The sine and cosine of the angle are already stored in \sine and +% \cosine. The result is placed in (\p@intvaluex, \p@intvaluey). +\newdimen\p@intvaluex +\newdimen\p@intvaluey +\def\rotate@#1#2{{\dimen0=#1 sp\dimen1=#2 sp +% calculate x' = x \cos\theta - y \sin\theta + \global\p@intvaluex=\cosine\dimen0 + \dimen3=\sine\dimen1 + \global\advance\p@intvaluex by -\dimen3 +% calculate y' = x \sin\theta + y \cos\theta + \global\p@intvaluey=\sine\dimen0 + \dimen3=\cosine\dimen1 + \global\advance\p@intvaluey by \dimen3 + }}% +\def\compute@bb{% + \epsfbbfoundfalse + \if@bbllx\epsfbbfoundtrue\fi + \if@bblly\epsfbbfoundtrue\fi + \if@bburx\epsfbbfoundtrue\fi + \if@bbury\epsfbbfoundtrue\fi + \ifepsfbbfound\else\bb@missing\fi + \ifepsfbbfound\else + \@latexerr{ERROR. cannot locate BoundingBox}\@whattodobb + \@p@@sbbllx{100bp}% + \@p@@sbblly{100bp}% + \@p@@sbburx{200bp}% + \@p@@sbbury{200bp}% + \no@bbtrue + \psdraft + \fi + % +% +% store height/width of original (unrotated) bounding box + \count203=\@p@sbburx + \count204=\@p@sbbury + \advance\count203 by -\@p@sbbllx + \advance\count204 by -\@p@sbblly + \edef\ps@bbw{\number\count203}% + \edef\ps@bbh{\number\count204}% + \edef\@bbw{\number\count203}% + \edef\@bbh{\number\count204}% + \if@angle + \Sine{\@p@sangle}\Cosine{\@p@sangle}% + +{\ps@dimcent=\maxdimen\xdef\r@p@sbbllx{\number\ps@dimcent}% + +\xdef\r@p@sbblly{\number\ps@dimcent}% + +\xdef\r@p@sbburx{-\number\ps@dimcent}% + +\xdef\r@p@sbbury{-\number\ps@dimcent}}% +% +% Need to rotate all four points and take the X-Y extremes of the new +% points as the new bounding box. + \def\minmaxtest{% + \ifnum\number\p@intvaluex<\r@p@sbbllx + \xdef\r@p@sbbllx{\number\p@intvaluex}\fi + \ifnum\number\p@intvaluex>\r@p@sbburx + \xdef\r@p@sbburx{\number\p@intvaluex}\fi + \ifnum\number\p@intvaluey<\r@p@sbblly + \xdef\r@p@sbblly{\number\p@intvaluey}\fi + \ifnum\number\p@intvaluey>\r@p@sbbury + \xdef\r@p@sbbury{\number\p@intvaluey}\fi + }% +% lower left + \rotate@{\@p@sbbllx}{\@p@sbblly}% + \minmaxtest +% upper left + \rotate@{\@p@sbbllx}{\@p@sbbury}% + \minmaxtest +% lower right + \rotate@{\@p@sbburx}{\@p@sbblly}% + \minmaxtest +% upper right + \rotate@{\@p@sbburx}{\@p@sbbury}% + \minmaxtest + +\edef\@p@sbbllx{\r@p@sbbllx}\edef\@p@sbblly{\r@p@sbblly}% + +\edef\@p@sbburx{\r@p@sbburx}\edef\@p@sbbury{\r@p@sbbury}% + \fi + \count203=\@p@sbburx + \count204=\@p@sbbury + \advance\count203 by -\@p@sbbllx + \advance\count204 by -\@p@sbblly + \edef\@bbw{\number\count203}% + \edef\@bbh{\number\count204}% +}% +% +% \in@hundreds performs #1 * (#2 / #3) correct to the hundreds, +% then leaves the result in @result +% +\def\in@hundreds#1#2#3{\count240=#2 \count241=#3 + \count100=\count240 % 100 is first digit #2/#3 + \divide\count100 by \count241 + \count101=\count100 + \multiply\count101 by \count241 + \advance\count240 by -\count101 + \multiply\count240 by 10 + \count101=\count240 %101 is second digit of #2/#3 + \divide\count101 by \count241 + \count102=\count101 + \multiply\count102 by \count241 + \advance\count240 by -\count102 + \multiply\count240 by 10 + \count102=\count240 % 102 is the third digit + \divide\count102 by \count241 + \count200=#1\count205=0 + \count201=\count200 + \multiply\count201 by \count100 + \advance\count205 by \count201 + \count201=\count200 + \divide\count201 by 10 + \multiply\count201 by \count101 + \advance\count205 by \count201 + % + \count201=\count200 + \divide\count201 by 100 + \multiply\count201 by \count102 + \advance\count205 by \count201 + % + \edef\@result{\number\count205}% +}% +\def\compute@wfromh{% + % computing : width = height * (bbw / bbh) + \in@hundreds{\@p@sheight}{\@bbw}{\@bbh}% + \edef\@p@swidth{\@result}% +}% +\def\compute@hfromw{% + % computing : height = width * (bbh / bbw) + \in@hundreds{\@p@swidth}{\@bbh}{\@bbw}% + \edef\@p@sheight{\@result}% +}% +\def\compute@handw{% + \if@height + \if@width + \else + \compute@wfromh + \fi + \else + \if@width + \compute@hfromw + \else + \edef\@p@sheight{\@bbh}% + \edef\@p@swidth{\@bbw}% + \fi + \fi +}% +\def\compute@resv{% + \if@rheight \else \edef\@p@srheight{\@p@sheight} \fi + \if@rwidth \else \edef\@p@srwidth{\@p@swidth} \fi +}% +% +% Compute any missing values +\def\compute@sizes{% + \if@scalefirst\if@angle +% at this point the bounding box has been adjsuted correctly for +% rotation. PSFIG does all of its scaling using \@bbh and \@bbw. If +% a width= or height= was specified along with \psscalefirst, then the +% width=/height= value needs to be adjusted to match the new (rotated) +% bounding box size (specifed in \@bbw and \@bbh). +% \ps@bbw width= +% ------- = ---------- +% \@bbw new width= +% so `new width=' = (width= * \@bbw) / \ps@bbw; where \ps@bbw is the +% width of the original (unrotated) bounding box. + \if@width + \in@hundreds{\@p@swidth}{\@bbw}{\ps@bbw}% + \edef\@p@swidth{\@result}% + \fi + \if@height + \in@hundreds{\@p@sheight}{\@bbh}{\ps@bbh}% + \edef\@p@sheight{\@result}% + \fi + \fi\fi + \compute@handw + \compute@resv +} +% + +%------------------------------------------------------------------ +%%% by the way, possible parameters to the PSfile= command in dvips are: +%%% llx +%%% lly +%%% urx +%%% ury +%%% rwi +% hoffset The horizontal offset (default 0) +% voffset The vertical offset (default 0) +% hsize The horizontal clipping size (default 612) +% vsize The vertical clipping size (default 792) +% hscale The horizontal scaling factor (default 100) +% vscale The vertical scaling factor (default 100) +% angle The rotation (default 0) +%------------------------------------------------------------------ +\long\def\graphic@verb#1{\def\next{#1}% + {\expandafter\graphic@strip\meaning\next}} +\def\graphic@strip#1>{} +\def\graphic@zapspace#1{% + #1\ifx\graphic@zapspace#1\graphic@zapspace% + \else\expandafter\graphic@zapspace% + \fi} +\def\psfig#1{% +\edef\@tempa{\graphic@zapspace#1{}}% +\ifvmode\leavevmode\fi\vbox {% + % + \ps@init@parms + \parse@ps@parms{\@tempa}% + % + \ifnum\@psdraft=1 + \typeout{[\@p@sfilefinal]}% + \if@verbose + \typeout{epsfig: using PSFIG macros}% + \fi + \psfig@method + \else + \epsfig@draft + \fi +} +}% +\def\graphic@zapspace#1{% + #1\ifx\graphic@zapspace#1\graphic@zapspace% + \else\expandafter\graphic@zapspace% + \fi} +\def\epsfig#1{% +\edef\@tempa{\graphic@zapspace#1{}}% +\ifvmode\leavevmode\fi\vbox {% + % + \ps@init@parms + \parse@ps@parms{\@tempa}% + % + \ifnum\@psdraft=1 + \if@angle\use@psfigtrue\fi + \ifuse@psfig + \if@verbose + \typeout{epsfig: using PSFIG macros}% + \fi + \psfig@method + \else + \if@verbose + \typeout{epsfig: using EPSF macros}% + \fi + \epsf@method + \fi + \else + \epsfig@draft + \fi +}% +}% + + +\def\epsf@method{% + \epsfbbfoundfalse + \if@bbllx\epsfbbfoundtrue\fi + \if@bblly\epsfbbfoundtrue\fi + \if@bburx\epsfbbfoundtrue\fi + \if@bbury\epsfbbfoundtrue\fi + \ifepsfbbfound\else\epsfgetbb{\@p@sfile}\fi + \ifepsfbbfound + \typeout{<\@p@sfilefinal>}% + \epsfig@gofer + \else + \@latexerr{ERROR - Cannot locate BoundingBox}\@whattodobb + \@p@@sbbllx{100bp}% + \@p@@sbblly{100bp}% + \@p@@sbburx{200bp}% + \@p@@sbbury{200bp}% + \count203=\@p@sbburx + \count204=\@p@sbbury + \advance\count203 by -\@p@sbbllx + \advance\count204 by -\@p@sbblly + \edef\@bbw{\number\count203}% + \edef\@bbh{\number\count204}% + \compute@sizes + \epsfig@@draft + \fi +}% +\def\psfig@method{% + \compute@bb + \ifepsfbbfound + \compute@sizes + \psfig@start + % Create the vbox to reserve the space for the figure% + \vbox to \@p@srheight sp{\hbox to \@p@srwidth + sp{\hss}\vss\psfig@end}% + \else + \epsfig@draft + \fi +}% +% +% draft figure, just reserve the space and print the +% path name. +\def\epsfig@draft{\compute@bb\compute@sizes\epsfig@@draft}% +% +\def\epsfig@@draft{% +\typeout{<(draft only) \@p@sfilefinal>}% +\if@draftbox + % Verbose draft: print file name in box + \hbox{{\fboxsep0pt\fbox{\vbox to \@p@srheight sp{% + \vss\hbox to \@p@srwidth sp{ \hss + \expandafter\Literally\@p@sfilefinal\@nil + \hss }\vss + }}}}% +\else + % Non-verbose draft + \vbox to \@p@srheight sp{% + \vss\hbox to \@p@srwidth sp{\hss}\vss}% +\fi +}% +\def\Literally#1\@nil{{\tt\graphic@verb{#1}}} +\def\psfigdriver#1{\typeout{^J WARNING: dont use psfigdriver! + use a class option!^J}} +\endinput + + diff --git a/obsolete/macros/latex209/contrib/epsfig/epsfig.sty b/obsolete/macros/latex209/contrib/epsfig/epsfig.sty new file mode 100644 index 0000000000..d4bb4d9ef8 --- /dev/null +++ b/obsolete/macros/latex209/contrib/epsfig/epsfig.sty @@ -0,0 +1,1137 @@ +%---------------------------------------------- +\def\fileversion{v1.20}% +\def\filedate{26.1.94}% +%%% +%%% from a suggestion by eijkhout@csrd.uiuc.edu to allow +%%% loading as a style file: +\edef\epsfigRestoreAt{\catcode`@=\number\catcode`@\relax}% +\catcode`\@=11\relax +\ifx\undefined\@makeother % -pks- +\def\@makeother#1{\catcode`#1=12\relax} % -pks- +\fi % -pks- +\immediate\write16{Document style option `epsfig', \fileversion\space +<\filedate> (edited by SPQR)}% +%%%-------------------------------------------------------------------- +%%% psfig merged with EPSF = epsfig Release 1 +%%% 1.0 November 91 +%%% 1.1 Dec 91 fixed some bugs +%%% 1.2 Jan 92 fixed bug that it never stopped reading PS file until +%%% it reached the end! merged in changes from psfig1.8 +%%% (plain TeX definition of \fbox, new code for rotation) +%%% 1.3 Jan 92 separated out \special code so that dvitops can be +%%% supported. use \psfigdriver{dvitops}% +%%% 1.4 Jan 92 fixed dvitops. need to input psfig at different point +%%% in dvips from dvitops. define \psfig@start and \psfig@end to cope +%%% with this +%%% 1.5 Jan 92 force use of psfig method if using dvitops +%%% 1.6 May 92 fixed bugs +%%% 1.7 Sep 92 added support for emtex, sort of. reads a .bb file +%%% and imports .pcx file. Boolean flag \epsfigdos used +%%% to indicate that we cannot have more than one . in the +%%% suffix (ie we will look at file.bb not file.eps.bb) +%%% +%%% 1.8 Sep 92 added support for OzTeX; fixed bugs in dvips support +%%% (including clipping to bounding box); removed use of dimen100. +%%% +%%% 1.9 Dec 92 cleaned up documentation again +%%% 1.10 Mar 93 cleaned up for plain TeX +%%% 1.11 Mar 93 merged in changes by Peter Galko (supplied by CERN) for +%%% use with Textures +%%% 1.12 Apr 93 actually *tested* the Textures additions, and so rewrote +%%% from scratch (borrowed an idea from psbox) +%%% 1.13 May 93 allow for file names with _ or $ in them in \psdraft, and +%%% fix problem that occurred with missing BoundingBox +%%% 1.14 May 93 allow for .z suffix +%%% 1.15 July 93 allow for .gz suffix +%%% use \leavevmode as appropriate +%%% fix plain \TeX mode +%%% (fixes from Peter-Klaus Schilling <R02SCH@DSYIBM.DESY.DE>) +%%% 1.16 August 93 [peta@mcrcim.mcgill.edu (Peter Whaite)] +%%% -- Implement Perl scripts to do compressed file inclusion and bb +%%% generation. +%%% -- Add \pscompress. +%%% -- Tidy up comments. +%%% 1.17 September 93 SPQR +%%% better code for literal name printing +%%% allowed for spaces around , and = +%%% 1.18 17.9.93 +%%% updates to epsbb and epsfig from Peter W +%%% 1.19 14.11.93 +%%% mistaken placement of calculation of EPS@Height resulted in errors +%%% 1.20 defaults to no compression +%-------------------------------------------------------- +%%% +%%% code rearranged by Sebastian Rahtz (spqr@uk.ac.york.minster) +%%% from work by +%%% Trevor Darrell; Tom Rokicki; Daniel Smith; H. Payne, Robert Russell +%%% +%%% This is a version of Darrell's `psfig' macros which are designed +%%% to be used with dvips or dvitops, and the `epsf' macros (these are +%%% automaticaly included by the style file). I did this because the +%%% \special commands used by `epsf' appear to be more robust and +%%% portable than the raw \specials used by `psfig', but I preferred +%%% the psfig interface. This system preserves the psfig interface, +%%% but mainly uses epsf macros to carry out the job. The user +%%% interface is identical to \psfig, but you just use \epsfig +%%% instead. Rotation uses the original psfig macros: I could not work +%%% out how to do rotation with the epsf macros. +%%% +%%% The same applies to `rheight' and `rwidth' +%%% +%%% If you *really* want old psfig behaviour regardless, use \psfig. It is +%%% still there. Some of the features have gone, however. \figurepath +%%% seemed redundant, since it could be controlled by the TEXINPUTS +%%% variable anyway. +%%% +%%% As an added feature, if FILE cannot be found, a file called FILE.bb +%%% is searched for. This should simply contain a %%BoundingBox line. A perl +%%% script "epsbb" is provided to generate these automatically. It is +%%% assumed that if this exists, then the actual postscript is in UNIX +%%% compress format in FILE.Z or in GNU gzip format in FILE.gz or FILE.z. +%%% +%%% The macros then read the BB from FILE.bb, but insert "`epsfig FILE`" in +%%% the output for dvips to interpret (don't worry, it knows about this). +%%% "Epsfig" is another perl script which searches the TEXINPUTS path for +%%% FILE or FILE.{gz,z,Z}. +%%% +%%% As an added bonus if you say \pscompress the -c switch will be passed to +%%% epsfig, causing automatic FILE.bb generation and compression the first +%%% time dvips is run. Files in the system directories will NOT be +%%% compressed. +%%% If you are *not* on a Unix system and use this, deliberately or by +%%% mischance, you will have problems! +%%% +%%% This file can be included in a dumped format, or used as a LaTeX +%%% style file, or used in plain TeX. It does not load itself twice (I hope) +%%% +%-------------------------------------------------------------------- +%-------------------------------------------------------------------- +%%% previous notes. this copy of psfig.tex inherited from versions 1.8 +%-------------------------------------------------------------------- +%%% All psfig/tex software, documentation, and related files +%%% in this distribution of psfig/tex are +%%% Copyright 1987, 1988, 1991 Trevor J. Darrell +% +%%% Permission is granted for use and non-profit distribution of psfig/tex +%%% providing that this notice be clearly maintained. The right to +%%% distribute any portion of psfig/tex for profit or as part of any commercial +%%% product is specifically reserved for the author(s) of that portion. +%%% +%%% Thanks to Greg Hager (GDH) and Ned Batchelder for their contributions +%%% to this project. +%%%-------------------------------------------------------------------------- +%%% GDH 7/26/87 -- changed so that it first looks in the local directory, +%%% then in a specified global directory for the ps file. +%%% SPQR 12/91 removed that last change. it follows TEXINPUTS anyway +%%% RPR 6/25/91 -- changed so that it defaults to user-supplied name if +%%% boundingbox info is specified, assuming graphic will be created by +%%% print time. +%%% SPQR 12/91 removed that last change. use LaTeX error message instead +%%% SPQR 12/91 -- `no file found' produces LaTeX error message. +%%% If you recover from that the file name is set in draft +%%% mode in place of the file. +%%% +%%% Modified by J. Daniel Smith on 9 October 1990 to accept the +%%% %%BoundingBox: comment with or without a space after the colon. Stole +%%% file reading code from Tom Rokicki's EPSF.TEX file (see below). +%%% --- SPQR 12.91 removed most of this to use epsf directly +%%% +%%% More modifications by J. Daniel Smith on 29 March 1991 to allow the +%%% the included PostScript figure to be rotated. The amount of +%%% rotation is specified by the "angle=" parameter of the \epsfig command. +%%% +%%% Modified by Robert Russell on June 25, 1991 to allow users to specify +%%% .ps filenames which don't yet exist, provided they explicitly provide +%%% boundingbox information via the \epsfig command. Note: This will only work +%%% if the "file=" parameter follows all four "bb???=" parameters in the +%%% command. This is due to the order in which psfig interprets these params. +%%% ---- SPQR 12.91 removed all this +%%% +%%% 3 Jul 1991 JDS check if file already read in once +%%% +%-----------------------------USAGE--------------------------------------- +% From: gvr@cs.brown.edu (George V. Reilly) +% +% \psdraft draws an outline box, but doesn't include the figure +% in the DVI file. Useful for previewing. +% +% \psfull includes the figure in the DVI file (default). +% +% \psscalefirst width= or height= specifies the size of the figure +% before rotation. +% \psrotatefirst (default) width= or height= specifies the size of the +% figure after rotation. Asymetric figures will +% appear to shrink. +% +% usage: \epsfig{file=, figure=, height=, width=, +% bbllx=, bblly=, bburx=, bbury=, +% rheight=, rwidth=, clip=, angle=, silent=}% +% +% "file" is the filename. If no path name is specified and the +% file is not found in the current directory, +% it will be looked for in directory \psfigurepath. +% "figure" is a synonym for "file". +% By default, the width and height of the figure are taken from +% the BoundingBox of the figure. +% If "width" is specified, the figure is scaled so that it has +% the specified width. Its height changes proportionately. +% If "height" is specified, the figure is scaled so that it has +% the specified height. Its width changes proportionately. +% If both "width" and "height" are specified, the figure is scaled +% anamorphically. +% "bbllx", "bblly", "bburx", and "bbury" control the PostScript +% BoundingBox. +% "rheight" and "rwidth" are the reserved height and width +% of the figure, i.e., how big TeX actually thinks +% the figure is. They default to "width" and "height". +% The "clip" option ensures that no portion of the figure will +% appear outside its BoundingBox. "clip=" is a switch and +% takes no value, but the `=' must be present. +% The "angle" option specifies the angle of rotation (degrees, ccw). +% The "silent" option makes \psfig work silently. +% +%-------------------------------------------------------------------------- +\newcount\EPS@Height \newcount\EPS@Width \newcount\EPS@xscale +\newcount\EPS@yscale +\def\psfigdriver#1{% + \bgroup\edef\next{\def\noexpand\tempa{#1}}% + \uppercase\expandafter{\next}% + \def\LN{DVITOLN03}% + \def\DVItoPS{DVITOPS}% + \def\DVIPS{DVIPS}% + \def\emTeX{EMTEX}% + \def\OzTeX{OZTEX}% + \def\Textures{TEXTURES}% + \global\chardef\fig@driver=0 + \ifx\tempa\LN + \global\chardef\fig@driver=0\fi + \ifx\tempa\DVItoPS + \global\chardef\fig@driver=1\fi + \ifx\tempa\DVIPS + \global\chardef\fig@driver=2\fi + \ifx\tempa\emTeX + \global\chardef\fig@driver=3\fi + \ifx\tempa\OzTeX + \global\chardef\fig@driver=4\fi + \ifx\tempa\Textures + \global\chardef\fig@driver=5\fi + \egroup +\def\psfig@start{}% +\def\psfig@end{}% +\def\epsfig@gofer{}% +\ifcase\fig@driver +% case 0 ln03 +\typeout{WARNING! **** + no specials for LN03 psfig}% +% +\or % case 1: dvitops +\def\psfig@start{}% +\def\psfig@end{\special{dvitops: import \@p@sfilefinal \space +\@p@swidth sp \space \@p@sheight sp \space fill}% +\if@clip \typeout{Clipping not supported}\fi +\if@angle \typeout{Rotating not supported}\fi +}% +\let\epsfig@gofer\psfig@end +% +\or %case2 dvips +\def\psfig@start{\special{ps::[begin] \@p@swidth \space \@p@sheight \space% + \@p@sbbllx \space \@p@sbblly \space% + \@p@sbburx \space \@p@sbbury \space% + startTexFig \space }% + \if@angle + \special {ps:: \@p@sangle \space rotate \space} + \fi + \if@clip + \if@verbose + \typeout{(clipped to BB) }% + \fi + \special{ps:: doclip \space }% + \fi + \special{ps: plotfile \@p@sfilefinal \space }% + \special{ps::[end] endTexFig \space }% +}% +\def\psfig@end{}% +\def\epsfig@gofer{\if@clip + \if@verbose + \typeout{(clipped to BB)}% + \fi + \epsfclipon + \fi + \epsfsetgraph{\@p@sfilefinal}% +}% +% +\or % case 3, emTeX +\typeout{WARNING. You must have a .bb info file with the Bounding Box + of the pcx file}% +\def\psfig@start{}% +% when emtex imports a pcx file, it is *below* where we are now. +% so raise the box +\def\psfig@end{\typeout{pcx import of \@p@sfilefinal}% +\if@clip \typeout{Clipping not supported}\fi +\if@angle \typeout{Rotating not supported}\fi +\raisebox{\@p@srheight sp}{\special{em: graph \@p@sfilefinal}}}% +\def\epsfig@gofer{}% +% +\or % case 4, OzTeX +\def\psfig@start{}% +\def\psfig@end{% +\EPS@Width\@p@swidth +\EPS@Height\@p@sheight +\divide\EPS@Width by 65781 % convert sp to bp +\divide\EPS@Height by 65781 +\special{epsf=\@p@sfilefinal +\space +width=\the\EPS@Width +\space +height=\the\EPS@Height +}% +\if@clip \typeout{Clipping not supported}\fi +\if@angle \typeout{Rotating not supported}\fi +}% +\let\epsfig@gofer\psfig@end +\or % case 5, Textures +\def\psfig@end{ +% what is scaling of picture + \EPS@Width=\@bbw + \divide\EPS@Width by 1000 + \EPS@xscale=\@p@swidth \divide \EPS@xscale by \EPS@Width + \EPS@Height=\@bbh + \divide\EPS@Height by 1000 + \EPS@yscale=\@p@sheight \divide \EPS@yscale by\EPS@Height +% take largest calculated scale + \ifnum\EPS@xscale>\EPS@yscale\EPS@xscale=\EPS@yscale\fi +\if@clip + \if@verbose + \typeout{(clipped to BB)}% + \fi + \epsfclipon +\fi +\special{illustration \@p@sfilefinal\space scaled \the\EPS@xscale}% +}% +\def\psfig@start{}% +\let\epsfig\psfig +\else +\typeout{WARNING. *** unknown driver - no psfig}% +\fi +}% +% copies of bits of LaTeX we need.... +\newdimen\ps@dimcent +% +% \fbox is defined in latex.tex; so if \fbox is undefined, assume that +% we are not in LaTeX. +% Perhaps this could be done better??? +\ifx\undefined\fbox +% \fbox code from modified slightly from LaTeX +\newdimen\fboxrule +\newdimen\fboxsep +\newdimen\ps@tempdima +\newbox\ps@tempboxa +\fboxsep = 0pt +\fboxrule = .4pt +\long\def\fbox#1{\leavevmode\setbox\ps@tempboxa\hbox{#1}\ps@tempdima\fboxrule + \advance\ps@tempdima \fboxsep \advance\ps@tempdima \dp\ps@tempboxa + \hbox{\lower \ps@tempdima\hbox + {\vbox{\hrule height \fboxrule + \hbox{\vrule width \fboxrule \hskip\fboxsep + \vbox{\vskip\fboxsep \box\ps@tempboxa\vskip\fboxsep}\hskip + \fboxsep\vrule width \fboxrule}% + \hrule height \fboxrule}}}}% +\fi +\ifx\@ifundefined\undefined +\long\def\@ifundefined#1#2#3{\expandafter\ifx\csname + #1\endcsname\relax#2\else#3\fi}% +\fi +% +\@ifundefined{typeout}% +{\gdef\typeout#1{\immediate\write\sixt@@n{#1}}}% +{\relax}% +% +%%% check to see if macros already loaded in (maybe some other file says +%%% "\input epsfig") ... +\@ifundefined{epsfig}{}{\typeout{EPSFIG --- already loaded}\endinput}% +% +%%% +%%% we need Rokicki's EPSF macros anyway, unless they are already loaded +% +\@ifundefined{epsfbox}{\input epsf}{}% +% +%% SPQR 12.91 handling of errors using standard LaTeX error +%% mechanism. In case we are plain TeX we first define the +%% error routines... +\ifx\undefined\@latexerr + \newlinechar`\^^J + \def\@spaces{\space\space\space\space}% + \def\@latexerr#1#2{% + \edef\@tempc{#2}\expandafter\errhelp\expandafter{\@tempc}% + \typeout{Error. \space see a manual for explanation.^^J + \space\@spaces\@spaces\@spaces Type \space H <return> \space for + immediate help.}\errmessage{#1}}% +\fi +%------------------------ +%% a couple of LaTeX error messages +\def\@whattodo{You tried to include a PostScript figure which +cannot be found^^JIf you press return to carry on anyway,^^J +The failed name will be printed in place of the figure.^^J +or type X to quit}% +\def\@whattodobb{You tried to include a PostScript figure which +has no^^Jbounding box, and you supplied none.^^J +If you press return to carry on anyway,^^J +The failed name will be printed in place of the figure.^^J +or type X to quit}% +%------------------------ +% +%------------------------------------------------------------------------ +%------------------------------------------------------------------------ +%%% @psdo control structure -- similar to Latex @for. +%%% I redefined these with different names so that psfig can +%%% be used with TeX as well as LaTeX, and so that it will not +%%% be vunerable to future changes in LaTeX's internal +%%% control structure, +% +\def\@nnil{\@nil}% +\def\@empty{}% +\def\@psdonoop#1\@@#2#3{}% +\def\@psdo#1:=#2\do#3{\edef\@psdotmp{#2}\ifx\@psdotmp\@empty \else + \expandafter\@psdoloop#2,\@nil,\@nil\@@#1{#3}\fi}% +\def\@psdoloop#1,#2,#3\@@#4#5{\def#4{#1}\ifx #4\@nnil \else + #5\def#4{#2}\ifx #4\@nnil \else#5\@ipsdoloop #3\@@#4{#5}\fi\fi}% +\def\@ipsdoloop#1,#2\@@#3#4{\def#3{#1}\ifx #3\@nnil + \let\@nextwhile=\@psdonoop \else + #4\relax\let\@nextwhile=\@ipsdoloop\fi\@nextwhile#2\@@#3{#4}}% +\def\@tpsdo#1:=#2\do#3{\xdef\@psdotmp{#2}\ifx\@psdotmp\@empty \else + \@tpsdoloop#2\@nil\@nil\@@#1{#3}\fi}% +\def\@tpsdoloop#1#2\@@#3#4{\def#3{#1}\ifx #3\@nnil + \let\@nextwhile=\@psdonoop \else + #4\relax\let\@nextwhile=\@tpsdoloop\fi\@nextwhile#2\@@#3{#4}}% +%%% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% file reading stuff from epsf.tex +%%% EPSF.TEX macro file: +%%% Written by Tomas Rokicki of Radical Eye Software, 29 Mar 1989. +%%% Revised by Don Knuth, 3 Jan 1990. +%%% Revised by Tomas Rokicki to accept bounding boxes with no +%%% space after the colon, 18 Jul 1990. +%%% Portions modified/removed for use in PSFIG package by +%%% J. Daniel Smith, 9 October 1990. +%%% Just the bit which knows about (atend) as a BoundingBox +% +%%% hacked back a bit by SPQR 12/91 +% +\long\def\epsfaux#1#2:#3\\{\ifx#1\epsfpercent + \def\testit{#2}\ifx\testit\epsfbblit + \@atendfalse + \epsf@atend #3 . \\% + \if@atend + \if@verbose + \typeout{epsfig: found `(atend)'; continuing search}% + \fi + \else + \epsfgrab #3 . . . \\% + \epsffileokfalse\global\no@bbfalse + \global\epsfbbfoundtrue + \fi + \fi\fi}% +% +%%% Determine if the stuff following the %%BoundingBox is `(atend)' +%%% J. Daniel Smith. Copied from \epsf@grab above. +% +\def\epsf@atendlit{(atend)} +% +\def\epsf@atend #1 #2 #3\\{% + \def\epsf@tmp{#1}\ifx\epsf@tmp\empty + \epsf@atend #2 #3 .\\\else + \ifx\epsf@tmp\epsf@atendlit\@atendtrue\fi\fi}% + + +%%% End of file reading stuff from epsf.tex +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% trigonometry stuff from "trig.tex" +\chardef\trig@letter = 11 +\chardef\other = 12 + +\newif\ifdebug %%% turn me on to see TeX hard at work ... +\newif\ifc@mpute %%% don't need to compute some values +\newif\if@atend +\c@mputetrue % but assume that we do + +\let\then = \relax +\def\r@dian{pt }% +\let\r@dians = \r@dian +\let\dimensionless@nit = \r@dian +\let\dimensionless@nits = \dimensionless@nit +\def\internal@nit{sp }% +\let\internal@nits = \internal@nit +\newif\ifstillc@nverging +\def \Mess@ge #1{\ifdebug \then \message {#1} \fi}% + +{ %%% Things that need abnormal catcodes %%% + \catcode `\@ = \trig@letter + \gdef \nodimen {\expandafter \n@dimen \the \dimen}% + \gdef \term #1 #2 #3% + {\edef \t@ {\the #1}%%% freeze parameter 1 (count, by value) + \edef \t@@ {\expandafter \n@dimen \the #2\r@dian}% + %%% freeze parameter 2 (dimen, by value) + \t@rm {\t@} {\t@@} {#3}% + }% + \gdef \t@rm #1 #2 #3% + {{% + \count 0 = 0 + \dimen 0 = 1 \dimensionless@nit + \dimen 2 = #2\relax + \Mess@ge {Calculating term #1 of \nodimen 2}% + \loop + \ifnum \count 0 < #1 + \then \advance \count 0 by 1 + \Mess@ge {Iteration \the \count 0 \space}% + \Multiply \dimen 0 by {\dimen 2}% + \Mess@ge {After multiplication, term = \nodimen 0}% + \Divide \dimen 0 by {\count 0}% + \Mess@ge {After division, term = \nodimen 0}% + \repeat + \Mess@ge {Final value for term #1 of + \nodimen 2 \space is \nodimen 0}% + \xdef \Term {#3 = \nodimen 0 \r@dians}% + \aftergroup \Term + }}% + \catcode `\p = \other + \catcode `\t = \other + \gdef \n@dimen #1pt{#1} %%% throw away the ``pt'' +}% + +\def \Divide #1by #2{\divide #1 by #2} %%% just a synonym + +\def \Multiply #1by #2%%% allows division of a dimen by a dimen + {{%%% should really freeze parameter 2 (dimen, passed by value) + \count 0 = #1\relax + \count 2 = #2\relax + \count 4 = 65536 + \Mess@ge {Before scaling, count 0 = \the \count 0 \space and + count 2 = \the \count 2}% + \ifnum \count 0 > 32767 %%% do our best to avoid overflow + \then \divide \count 0 by 4 + \divide \count 4 by 4 + \else \ifnum \count 0 < -32767 + \then \divide \count 0 by 4 + \divide \count 4 by 4 + \else + \fi + \fi + \ifnum \count 2 > 32767 %%% while retaining reasonable accuracy + \then \divide \count 2 by 4 + \divide \count 4 by 4 + \else \ifnum \count 2 < -32767 + \then \divide \count 2 by 4 + \divide \count 4 by 4 + \else + \fi + \fi + \multiply \count 0 by \count 2 + \divide \count 0 by \count 4 + \xdef \product {#1 = \the \count 0 \internal@nits}% + \aftergroup \product + }}% + +\def\r@duce{\ifdim\dimen0 > 90\r@dian \then % sin(x) = sin(180-x) + \multiply\dimen0 by -1 + \advance\dimen0 by 180\r@dian + \r@duce + \else \ifdim\dimen0 < -90\r@dian \then % sin(x) = sin(360+x) + \advance\dimen0 by 360\r@dian + \r@duce + \fi + \fi}% + +\def\Sine#1% + {{% + \dimen 0 = #1 \r@dian + \r@duce + \ifdim\dimen0 = -90\r@dian \then + \dimen4 = -1\r@dian + \c@mputefalse + \fi + \ifdim\dimen0 = 90\r@dian \then + \dimen4 = 1\r@dian + \c@mputefalse + \fi + \ifdim\dimen0 = 0\r@dian \then + \dimen4 = 0\r@dian + \c@mputefalse + \fi +% + \ifc@mpute \then + % convert degrees to radians + \divide\dimen0 by 180 + \dimen0=3.141592654\dimen0 +% + \dimen 2 = 3.1415926535897963\r@dian %%% a well-known constant + \divide\dimen 2 by 2 %%% we only deal with -pi/2 : pi/2 + \Mess@ge {Sin: calculating Sin of \nodimen 0}% + \count 0 = 1 %%% see power-series expansion for sine + \dimen 2 = 1 \r@dian %%% ditto + \dimen 4 = 0 \r@dian %%% ditto + \loop + \ifnum \dimen 2 = 0 %%% then we've done + \then \stillc@nvergingfalse + \else \stillc@nvergingtrue + \fi + \ifstillc@nverging %%% then calculate next term + \then \term {\count 0} {\dimen 0} {\dimen 2}% + \advance \count 0 by 2 + \count 2 = \count 0 + \divide \count 2 by 2 + \ifodd \count 2 %%% signs alternate + \then \advance \dimen 4 by \dimen 2 + \else \advance \dimen 4 by -\dimen 2 + \fi + \repeat + \fi + \xdef \sine {\nodimen 4}% + }}% + +%%% Now the Cosine can be calculated easily by calling \Sine: +%%% cos(x) = sin(90-x) +\def\Cosine#1{\ifx\sine\UnDefined\edef\Savesine{\relax}\else + \edef\Savesine{\sine}\fi + {\dimen0=#1\r@dian\multiply\dimen0 by -1 + \advance\dimen0 by 90\r@dian + \Sine{\nodimen 0}% + \xdef\cosine{\sine}% + \xdef\sine{\Savesine}}} +%%% end of trig stuff +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +\def\psdraft{\def\@psdraft{0}}% +\def\psfull{\def\@psdraft{1}}% +\psfull +\newif\if@compress +\def\pscompress{\@compresstrue} +\def\psnocompress{\@compressfalse} +\@compressfalse +\newif\if@scalefirst +\def\psscalefirst{\@scalefirsttrue}% +\def\psrotatefirst{\@scalefirstfalse}% +\psrotatefirst +% +\newif\if@draftbox +\def\psnodraftbox{\@draftboxfalse}% +\@draftboxtrue +% +\newif\if@noisy +\@noisyfalse +\newif\ifno@bb +%%% These are for the option list. +%%% A specification of the form a = b maps to calling \@p@@sa{b}% +\newif\if@bbllx +\newif\if@bblly +\newif\if@bburx +\newif\if@bbury +\newif\if@height +\newif\if@width +\newif\if@rheight +\newif\if@rwidth +\newif\if@angle +\newif\if@clip +\newif\if@verbose +\newif\if@prologfile +\def\@p@@sprolog#1{\@prologfiletrue\def\@prologfileval{#1}}% +\def\@p@@sclip#1{\@cliptrue}% +% +\newif\ifepsfig@dos % only single suffix possible +\def\epsfigdos{\epsfig@dostrue}% +\epsfig@dosfalse +%%% if this is true, the original Darrell macros and specials are used +\newif\ifuse@psfig +% +\def\ParseName#1{\expandafter\@Parse#1}% +\def\@Parse#1.#2:{\gdef\BaseName{#1}\gdef\FileType{#2}}% + +\def\@p@@sfile#1{% + \ifepsfig@dos + \ParseName{#1:}% + \else + \gdef\BaseName{#1}\gdef\FileType{}% + \fi + \def\@p@sfile{NO FILE: #1}% + \def\@p@sfilefinal{NO FILE: #1}% + \openin1=#1 + \ifeof1\closein1\openin1=\BaseName.bb + \ifeof1\closein1 + \if@bbllx % No postscript file but bb given explicitly. + \if@bblly\if@bburx\if@bbury + \def\@p@sfile{#1}% + \def\@p@sfilefinal{#1}% + \fi\fi\fi + \else % No bounding box found. + \@latexerr{ERROR. PostScript file #1 not found}\@whattodo + \@p@@sbbllx{100bp}% + \@p@@sbblly{100bp}% + \@p@@sbburx{200bp}% + \@p@@sbbury{200bp}% + \psdraft + \fi + \else % Postscript file is compressed. + \closein1% + \edef\@p@sfile{\BaseName.bb}% + \typeout{using BB from \@p@sfile}% + \ifnum\fig@driver=3 + \edef\@p@sfilefinal{\BaseName.pcx}% + \else + \ifepsfig@dos + \edef\@p@sfilefinal{"`gunzip -c `texfind \BaseName.{z,Z,gz}"}% + \else + \edef\@p@sfilefinal{"`epsfig \if@compress-c \fi#1"}% + \fi + \fi + \fi + \else\closein1 % Postscript file is not compressed. + \edef\@p@sfile{#1}% + \if@compress + \edef\@p@sfilefinal{"`epsfig -c #1"}% + \else + \edef\@p@sfilefinal{#1}% + \fi + \fi% +} + +% alternative syntax: figure= +\let\@p@@sfigure\@p@@sfile +% +\def\@p@@sbbllx#1{% + \@bbllxtrue + \ps@dimcent=#1 + \edef\@p@sbbllx{\number\ps@dimcent}% + \divide\ps@dimcent by65536 + \global\edef\epsfllx{\number\ps@dimcent}% +}% +\def\@p@@sbblly#1{% + \@bbllytrue + \ps@dimcent=#1 + \edef\@p@sbblly{\number\ps@dimcent}% + \divide\ps@dimcent by65536 + \global\edef\epsflly{\number\ps@dimcent}% +}% +\def\@p@@sbburx#1{% + \@bburxtrue + \ps@dimcent=#1 + \edef\@p@sbburx{\number\ps@dimcent}% + \divide\ps@dimcent by65536 + \global\edef\epsfurx{\number\ps@dimcent}% +}% +\def\@p@@sbbury#1{% + \@bburytrue + \ps@dimcent=#1 + \edef\@p@sbbury{\number\ps@dimcent}% + \divide\ps@dimcent by65536 + \global\edef\epsfury{\number\ps@dimcent}% +}% +\def\@p@@sheight#1{% + \@heighttrue + \global\epsfysize=#1 + \ps@dimcent=#1 + \edef\@p@sheight{\number\ps@dimcent}% +}% +\def\@p@@swidth#1{% + \@widthtrue + \global\epsfxsize=#1 + \ps@dimcent=#1 + \edef\@p@swidth{\number\ps@dimcent}% +}% +\def\@p@@srheight#1{% + \@rheighttrue\use@psfigtrue + \ps@dimcent=#1 + \edef\@p@srheight{\number\ps@dimcent}% +}% +\def\@p@@srwidth#1{% + \@rwidthtrue\use@psfigtrue + \ps@dimcent=#1 + \edef\@p@srwidth{\number\ps@dimcent}% +}% +\def\@p@@sangle#1{% + \use@psfigtrue + \@angletrue + \edef\@p@sangle{#1}% +}% +\def\@p@@ssilent#1{% + \@verbosefalse +}% +\def\@p@@snoisy#1{% + \@verbosetrue +}% +\def\@cs@name#1{\csname #1\endcsname}% +\def\@setparms#1=#2,{\@cs@name{@p@@s#1}{#2}}% +% +%%% initialize the defaults (size the size of the figure) +% +\def\ps@init@parms{% + \@bbllxfalse \@bbllyfalse + \@bburxfalse \@bburyfalse + \@heightfalse \@widthfalse + \@rheightfalse \@rwidthfalse + \def\@p@sbbllx{}\def\@p@sbblly{}% + \def\@p@sbburx{}\def\@p@sbbury{}% + \def\@p@sheight{}\def\@p@swidth{}% + \def\@p@srheight{}\def\@p@srwidth{}% + \def\@p@sangle{0}% + \def\@p@sfile{}% + \use@psfigfalse + \@prologfilefalse + \def\@sc{}% + \if@noisy + \@verbosetrue + \else + \@verbosefalse + \fi + \@clipfalse +}% +% +%%% Go through the options setting things up. +% +\def\parse@ps@parms#1{% + \@psdo\@psfiga:=#1\do + {\expandafter\@setparms\@psfiga,}% +\if@prologfile +\special{header=\@prologfileval}% +\fi +}% +% +%%% Compute bb height and width +% +\def\bb@missing{% + \if@verbose + \typeout{psfig: searching \@p@sfile \space for bounding box}% + \fi + \epsfgetbb{\@p@sfile}% + \ifepsfbbfound + \ps@dimcent=\epsfllx bp\edef\@p@sbbllx{\number\ps@dimcent}% + \ps@dimcent=\epsflly bp\edef\@p@sbblly{\number\ps@dimcent}% + \ps@dimcent=\epsfurx bp\edef\@p@sbburx{\number\ps@dimcent}% + \ps@dimcent=\epsfury bp\edef\@p@sbbury{\number\ps@dimcent}% + \else + \epsfbbfoundfalse + \fi +} +% +% rotate point (#1,#2) about (0,0). +% The sine and cosine of the angle are already stored in \sine and +% \cosine. The result is placed in (\p@intvaluex, \p@intvaluey). +\newdimen\p@intvaluex +\newdimen\p@intvaluey +\def\rotate@#1#2{{\dimen0=#1 sp\dimen1=#2 sp +% calculate x' = x \cos\theta - y \sin\theta + \global\p@intvaluex=\cosine\dimen0 + \dimen3=\sine\dimen1 + \global\advance\p@intvaluex by -\dimen3 +% calculate y' = x \sin\theta + y \cos\theta + \global\p@intvaluey=\sine\dimen0 + \dimen3=\cosine\dimen1 + \global\advance\p@intvaluey by \dimen3 + }}% +\def\compute@bb{% + \epsfbbfoundfalse + \if@bbllx\epsfbbfoundtrue\fi + \if@bblly\epsfbbfoundtrue\fi + \if@bburx\epsfbbfoundtrue\fi + \if@bbury\epsfbbfoundtrue\fi + \ifepsfbbfound\else\bb@missing\fi + \ifepsfbbfound\else + \@latexerr{ERROR. cannot locate BoundingBox}\@whattodobb + \@p@@sbbllx{100bp}% + \@p@@sbblly{100bp}% + \@p@@sbburx{200bp}% + \@p@@sbbury{200bp}% + \no@bbtrue + \psdraft + \fi + % +% +% store height/width of original (unrotated) bounding box + \count203=\@p@sbburx + \count204=\@p@sbbury + \advance\count203 by -\@p@sbbllx + \advance\count204 by -\@p@sbblly + \edef\ps@bbw{\number\count203}% + \edef\ps@bbh{\number\count204}% + \edef\@bbw{\number\count203}% + \edef\@bbh{\number\count204}% + \if@angle + \Sine{\@p@sangle}\Cosine{\@p@sangle}% + +{\ps@dimcent=\maxdimen\xdef\r@p@sbbllx{\number\ps@dimcent}% + +\xdef\r@p@sbblly{\number\ps@dimcent}% + +\xdef\r@p@sbburx{-\number\ps@dimcent}% + +\xdef\r@p@sbbury{-\number\ps@dimcent}}% +% +% Need to rotate all four points and take the X-Y extremes of the new +% points as the new bounding box. + \def\minmaxtest{% + \ifnum\number\p@intvaluex<\r@p@sbbllx + \xdef\r@p@sbbllx{\number\p@intvaluex}\fi + \ifnum\number\p@intvaluex>\r@p@sbburx + \xdef\r@p@sbburx{\number\p@intvaluex}\fi + \ifnum\number\p@intvaluey<\r@p@sbblly + \xdef\r@p@sbblly{\number\p@intvaluey}\fi + \ifnum\number\p@intvaluey>\r@p@sbbury + \xdef\r@p@sbbury{\number\p@intvaluey}\fi + }% +% lower left + \rotate@{\@p@sbbllx}{\@p@sbblly}% + \minmaxtest +% upper left + \rotate@{\@p@sbbllx}{\@p@sbbury}% + \minmaxtest +% lower right + \rotate@{\@p@sbburx}{\@p@sbblly}% + \minmaxtest +% upper right + \rotate@{\@p@sbburx}{\@p@sbbury}% + \minmaxtest + +\edef\@p@sbbllx{\r@p@sbbllx}\edef\@p@sbblly{\r@p@sbblly}% + +\edef\@p@sbburx{\r@p@sbburx}\edef\@p@sbbury{\r@p@sbbury}% + \fi + \count203=\@p@sbburx + \count204=\@p@sbbury + \advance\count203 by -\@p@sbbllx + \advance\count204 by -\@p@sbblly + \edef\@bbw{\number\count203}% + \edef\@bbh{\number\count204}% +}% +% +% \in@hundreds performs #1 * (#2 / #3) correct to the hundreds, +% then leaves the result in @result +% +\def\in@hundreds#1#2#3{\count240=#2 \count241=#3 + \count100=\count240 % 100 is first digit #2/#3 + \divide\count100 by \count241 + \count101=\count100 + \multiply\count101 by \count241 + \advance\count240 by -\count101 + \multiply\count240 by 10 + \count101=\count240 %101 is second digit of #2/#3 + \divide\count101 by \count241 + \count102=\count101 + \multiply\count102 by \count241 + \advance\count240 by -\count102 + \multiply\count240 by 10 + \count102=\count240 % 102 is the third digit + \divide\count102 by \count241 + \count200=#1\count205=0 + \count201=\count200 + \multiply\count201 by \count100 + \advance\count205 by \count201 + \count201=\count200 + \divide\count201 by 10 + \multiply\count201 by \count101 + \advance\count205 by \count201 + % + \count201=\count200 + \divide\count201 by 100 + \multiply\count201 by \count102 + \advance\count205 by \count201 + % + \edef\@result{\number\count205}% +}% +\def\compute@wfromh{% + % computing : width = height * (bbw / bbh) + \in@hundreds{\@p@sheight}{\@bbw}{\@bbh}% + \edef\@p@swidth{\@result}% +}% +\def\compute@hfromw{% + % computing : height = width * (bbh / bbw) + \in@hundreds{\@p@swidth}{\@bbh}{\@bbw}% + \edef\@p@sheight{\@result}% +}% +\def\compute@handw{% + \if@height + \if@width + \else + \compute@wfromh + \fi + \else + \if@width + \compute@hfromw + \else + \edef\@p@sheight{\@bbh}% + \edef\@p@swidth{\@bbw}% + \fi + \fi +}% +\def\compute@resv{% + \if@rheight \else \edef\@p@srheight{\@p@sheight} \fi + \if@rwidth \else \edef\@p@srwidth{\@p@swidth} \fi +}% +% +% Compute any missing values +\def\compute@sizes{% + \if@scalefirst\if@angle +% at this point the bounding box has been adjsuted correctly for +% rotation. PSFIG does all of its scaling using \@bbh and \@bbw. If +% a width= or height= was specified along with \psscalefirst, then the +% width=/height= value needs to be adjusted to match the new (rotated) +% bounding box size (specifed in \@bbw and \@bbh). +% \ps@bbw width= +% ------- = ---------- +% \@bbw new width= +% so `new width=' = (width= * \@bbw) / \ps@bbw; where \ps@bbw is the +% width of the original (unrotated) bounding box. + \if@width + \in@hundreds{\@p@swidth}{\@bbw}{\ps@bbw}% + \edef\@p@swidth{\@result}% + \fi + \if@height + \in@hundreds{\@p@sheight}{\@bbh}{\ps@bbh}% + \edef\@p@sheight{\@result}% + \fi + \fi\fi + \compute@handw + \compute@resv +} +% + +%------------------------------------------------------------------ +%%% by the way, possible parameters to the PSfile= command in dvips are: +%%% llx +%%% lly +%%% urx +%%% ury +%%% rwi +% hoffset The horizontal offset (default 0) +% voffset The vertical offset (default 0) +% hsize The horizontal clipping size (default 612) +% vsize The vertical clipping size (default 792) +% hscale The horizontal scaling factor (default 100) +% vscale The vertical scaling factor (default 100) +% angle The rotation (default 0) +%------------------------------------------------------------------ +\long\def\graphic@verb#1{\def\next{#1}% + {\expandafter\graphic@strip\meaning\next}} +\def\graphic@strip#1>{} +\def\graphic@zapspace#1{% + #1\ifx\graphic@zapspace#1\graphic@zapspace% + \else\expandafter\graphic@zapspace% + \fi} +\def\psfig#1{% +\edef\@tempa{\graphic@zapspace#1{}}% +\ifvmode\leavevmode\fi\vbox {% + % + \ps@init@parms + \parse@ps@parms{\@tempa}% + % + \ifnum\@psdraft=1 + \typeout{[\@p@sfilefinal]}% + \if@verbose + \typeout{epsfig: using PSFIG macros}% + \fi + \psfig@method + \else + \epsfig@draft + \fi +} +}% +\def\graphic@zapspace#1{% + #1\ifx\graphic@zapspace#1\graphic@zapspace% + \else\expandafter\graphic@zapspace% + \fi} +\def\epsfig#1{% +\edef\@tempa{\graphic@zapspace#1{}}% +\ifvmode\leavevmode\fi\vbox {% + % + \ps@init@parms + \parse@ps@parms{\@tempa}% + % + \ifnum\@psdraft=1 + \if@angle\use@psfigtrue\fi + {\ifnum\fig@driver=1\global\use@psfigtrue\fi}% + {\ifnum\fig@driver=3\global\use@psfigtrue\fi}% + {\ifnum\fig@driver=4\global\use@psfigtrue\fi}% + {\ifnum\fig@driver=5\global\use@psfigtrue\fi}% + \ifuse@psfig + \if@verbose + \typeout{epsfig: using PSFIG macros}% + \fi + \psfig@method + \else + \if@verbose + \typeout{epsfig: using EPSF macros}% + \fi + \epsf@method + \fi + \else + \epsfig@draft + \fi +}% +}% + + +\def\epsf@method{% + \epsfbbfoundfalse + \if@bbllx\epsfbbfoundtrue\fi + \if@bblly\epsfbbfoundtrue\fi + \if@bburx\epsfbbfoundtrue\fi + \if@bbury\epsfbbfoundtrue\fi + \ifepsfbbfound\else\epsfgetbb{\@p@sfile}\fi + \ifepsfbbfound + \typeout{<\@p@sfilefinal>}% + \epsfig@gofer + \else + \@latexerr{ERROR - Cannot locate BoundingBox}\@whattodobb + \@p@@sbbllx{100bp}% + \@p@@sbblly{100bp}% + \@p@@sbburx{200bp}% + \@p@@sbbury{200bp}% + \count203=\@p@sbburx + \count204=\@p@sbbury + \advance\count203 by -\@p@sbbllx + \advance\count204 by -\@p@sbblly + \edef\@bbw{\number\count203}% + \edef\@bbh{\number\count204}% + \compute@sizes + \epsfig@@draft + \fi +}% +\def\psfig@method{% + \compute@bb + \ifepsfbbfound + \compute@sizes + \psfig@start + % Create the vbox to reserve the space for the figure% + \vbox to \@p@srheight sp{\hbox to \@p@srwidth + sp{\hss}\vss\psfig@end}% + \else + \epsfig@draft + \fi +}% +% +% draft figure, just reserve the space and print the +% path name. +\def\epsfig@draft{\compute@bb\compute@sizes\epsfig@@draft}% +% +\def\epsfig@@draft{% +\typeout{<(draft only) \@p@sfilefinal>}% +\if@draftbox + % Verbose draft: print file name in box + \hbox{{\fboxsep0pt\fbox{\vbox to \@p@srheight sp{% + \vss\hbox to \@p@srwidth sp{ \hss + \expandafter\Literally\@p@sfilefinal\@nil + \hss }\vss + }}}}% +\else + % Non-verbose draft + \vbox to \@p@srheight sp{% + \vss\hbox to \@p@srwidth sp{\hss}\vss}% +\fi +}% +\def\Literally#1\@nil{{\tt\graphic@verb{#1}}} +% default to dvips +\psfigdriver{dvips}% +% and to DOS file conventions +%%% \epsfigdos +\epsfigRestoreAt + diff --git a/obsolete/macros/latex209/contrib/epsfig/makefile b/obsolete/macros/latex209/contrib/epsfig/makefile new file mode 100644 index 0000000000..e5e5540631 --- /dev/null +++ b/obsolete/macros/latex209/contrib/epsfig/makefile @@ -0,0 +1,28 @@ +# USER CONFIG -- edit the following to suit your system +# +BINDIR=${HOME}/bin +STYDIR=${HOME}/lib/tex +INSTALL=/usr/local/bin/install -g tex +# +# END USER CONFIG. + +BINS=epsfig epsbb +STYS=epsfig.sty + + +install: ${STYDIR}/epsfig.sty ${BINDIR}/epsfig ${BINDIR}/epsbb + +${STYDIR}/epsfig.sty : epsfig.sty + $(INSTALL) -m 0644 epsfig.sty ${STYDIR} + +${BINDIR}/epsfig : epsfig + $(INSTALL) -m 0755 epsfig ${BINDIR} + +${BINDIR}/epsbb : epsbb + $(INSTALL) -m 0755 epsbb ${BINDIR} + + +shar: epsfig.shar + +epsfig.shar: Makefile README ${BINS} ${STYS} + shar Makefile README ${BINS} ${STYS} > epsfig.shar |