/[MITgcm]/manual/texinputs/epsf.tex
ViewVC logotype

Annotation of /manual/texinputs/epsf.tex

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.1 - (hide annotations) (download) (as text)
Wed Jan 28 18:25:46 2004 UTC (21 years, 5 months ago) by molod
Branch: MAIN
CVS Tags: checkpoint57l_post, checkpoint01, HEAD
File MIME type: application/x-tex
Add epsf.tex file for encapsulated postscript file handling

1 molod 1.1 % EPSF.TEX macro file:
2     % Written by Tomas Rokicki of Radical Eye Software, 29 Mar 1989.
3     % Revised by Don Knuth, 3 Jan 1990.
4     % Revised by Tomas Rokicki to accept bounding boxes with no
5     % space after the colon, 18 Jul 1990.
6     %
7     % TeX macros to include an Encapsulated PostScript graphic.
8     % Works by finding the bounding box comment,
9     % calculating the correct scale values, and inserting a vbox
10     % of the appropriate size at the current position in the TeX document.
11     %
12     % To use with the center environment of LaTeX, preface the \epsffile
13     % call with a \leavevmode. (LaTeX should probably supply this itself
14     % for the center environment.)
15     %
16     % To use, simply say
17     % \input epsf % somewhere early on in your TeX file
18     % \epsfbox{filename.ps} % where you want to insert a vbox for a figure
19     %
20     % Alternatively, you can type
21     %
22     % \epsfbox[0 0 30 50]{filename.ps} % to supply your own BB
23     %
24     % which will not read in the file, and will instead use the bounding
25     % box you specify.
26     %
27     % The effect will be to typeset the figure as a TeX box, at the
28     % point of your \epsfbox command. By default, the graphic will have its
29     % `natural' width (namely the width of its bounding box, as described
30     % in filename.ps). The TeX box will have depth zero.
31     %
32     % You can enlarge or reduce the figure by saying
33     % \epsfxsize=<dimen> \epsfbox{filename.ps}
34     % (or
35     % \epsfysize=<dimen> \epsfbox{filename.ps})
36     % instead. Then the width of the TeX box will be \epsfxsize and its
37     % height will be scaled proportionately (or the height will be
38     % \epsfysize and its width will be scaled proportiontally). The
39     % width (and height) is restored to zero after each use.
40     %
41     % A more general facility for sizing is available by defining the
42     % \epsfsize macro. Normally you can redefine this macro
43     % to do almost anything. The first parameter is the natural x size of
44     % the PostScript graphic, the second parameter is the natural y size
45     % of the PostScript graphic. It must return the xsize to use, or 0 if
46     % natural scaling is to be used. Common uses include:
47     %
48     % \epsfxsize % just leave the old value alone
49     % 0pt % use the natural sizes
50     % #1 % use the natural sizes
51     % \hsize % scale to full width
52     % 0.5#1 % scale to 50% of natural size
53     % \ifnum#1>\hsize\hsize\else#1\fi % smaller of natural, hsize
54     %
55     % If you want TeX to report the size of the figure (as a message
56     % on your terminal when it processes each figure), say `\epsfverbosetrue'.
57     %
58     \newread\epsffilein % file to \read
59     \newif\ifepsffileok % continue looking for the bounding box?
60     \newif\ifepsfbbfound % success?
61     \newif\ifepsfverbose % report what you're making?
62     \newdimen\epsfxsize % horizontal size after scaling
63     \newdimen\epsfysize % vertical size after scaling
64     \newdimen\epsftsize % horizontal size before scaling
65     \newdimen\epsfrsize % vertical size before scaling
66     \newdimen\epsftmp % register for arithmetic manipulation
67     \newdimen\pspoints % conversion factor
68     %
69     \pspoints=1bp % Adobe points are `big'
70     \epsfxsize=0pt % Default value, means `use natural size'
71     \epsfysize=0pt % ditto
72     %
73     \def\epsfbox#1{\global\def\epsfllx{72}\global\def\epsflly{72}%
74     \global\def\epsfurx{540}\global\def\epsfury{720}%
75     \def\lbracket{[}\def\testit{#1}\ifx\testit\lbracket
76     \let\next=\epsfgetlitbb\else\let\next=\epsfnormal\fi\next{#1}}%
77     %
78     \def\epsfgetlitbb#1#2 #3 #4 #5]#6{\epsfgrab #2 #3 #4 #5 .\\%
79     \epsfsetgraph{#6}}%
80     %
81     \def\epsfnormal#1{\epsfgetbb{#1}\epsfsetgraph{#1}}%
82     %
83     \def\epsfgetbb#1{%
84     %
85     % The first thing we need to do is to open the
86     % PostScript file, if possible.
87     %
88     \openin\epsffilein=#1
89     \ifeof\epsffilein\errmessage{I couldn't open #1, will ignore it}\else
90     %
91     % Okay, we got it. Now we'll scan lines until we find one that doesn't
92     % start with %. We're looking for the bounding box comment.
93     %
94     {\epsffileoktrue \chardef\other=12
95     \def\do##1{\catcode`##1=\other}\dospecials \catcode`\ =10
96     \loop
97     \read\epsffilein to \epsffileline
98     \ifeof\epsffilein\epsffileokfalse\else
99     %
100     % We check to see if the first character is a % sign;
101     % if not, we stop reading (unless the line was entirely blank);
102     % if so, we look further and stop only if the line begins with
103     % `%%BoundingBox:'.
104     %
105     \expandafter\epsfaux\epsffileline:. \\%
106     \fi
107     \ifepsffileok\repeat
108     \ifepsfbbfound\else
109     \ifepsfverbose\message{No bounding box comment in #1; using defaults}\fi\fi
110     }\closein\epsffilein\fi}%
111     %
112     % Now we have to calculate the scale and offset values to use.
113     % First we compute the natural sizes.
114     %
115     \def\epsfclipstring{}% do we clip or not? If so,
116     \def\epsfclipon{\def\epsfclipstring{ clip}}%
117     \def\epsfclipoff{\def\epsfclipstring{}}%
118     %
119     \def\epsfsetgraph#1{%
120     \epsfrsize=\epsfury\pspoints
121     \advance\epsfrsize by-\epsflly\pspoints
122     \epsftsize=\epsfurx\pspoints
123     \advance\epsftsize by-\epsfllx\pspoints
124     %
125     % If `epsfxsize' is 0, we default to the natural size of the picture.
126     % Otherwise we scale the graph to be \epsfxsize wide.
127     %
128     \epsfxsize\epsfsize\epsftsize\epsfrsize
129     \ifnum\epsfxsize=0 \ifnum\epsfysize=0
130     \epsfxsize=\epsftsize \epsfysize=\epsfrsize
131     \epsfrsize=0pt
132     %
133     % We have a sticky problem here: TeX doesn't do floating point arithmetic!
134     % Our goal is to compute y = rx/t. The following loop does this reasonably
135     % fast, with an error of at most about 16 sp (about 1/4000 pt).
136     %
137     \else\epsftmp=\epsftsize \divide\epsftmp\epsfrsize
138     \epsfxsize=\epsfysize \multiply\epsfxsize\epsftmp
139     \multiply\epsftmp\epsfrsize \advance\epsftsize-\epsftmp
140     \epsftmp=\epsfysize
141     \loop \advance\epsftsize\epsftsize \divide\epsftmp 2
142     \ifnum\epsftmp>0
143     \ifnum\epsftsize<\epsfrsize\else
144     \advance\epsftsize-\epsfrsize \advance\epsfxsize\epsftmp \fi
145     \repeat
146     \epsfrsize=0pt
147     \fi
148     \else \ifnum\epsfysize=0
149     \epsftmp=\epsfrsize \divide\epsftmp\epsftsize
150     \epsfysize=\epsfxsize \multiply\epsfysize\epsftmp
151     \multiply\epsftmp\epsftsize \advance\epsfrsize-\epsftmp
152     \epsftmp=\epsfxsize
153     \loop \advance\epsfrsize\epsfrsize \divide\epsftmp 2
154     \ifnum\epsftmp>0
155     \ifnum\epsfrsize<\epsftsize\else
156     \advance\epsfrsize-\epsftsize \advance\epsfysize\epsftmp \fi
157     \repeat
158     \epsfrsize=0pt
159     \else
160     \epsfrsize=\epsfysize
161     \fi
162     \fi
163     %
164     % Finally, we make the vbox and stick in a \special that dvips can parse.
165     %
166     \ifepsfverbose\message{#1: width=\the\epsfxsize, height=\the\epsfysize}\fi
167     \epsftmp=10\epsfxsize \divide\epsftmp\pspoints
168     \vbox to\epsfysize{\vfil\hbox to\epsfxsize{%
169     \ifnum\epsfrsize=0\relax
170     \special{PSfile=#1 llx=\epsfllx\space lly=\epsflly\space
171     urx=\epsfurx\space ury=\epsfury\space rwi=\number\epsftmp
172     \epsfclipstring}%
173     \else
174     \epsfrsize=10\epsfysize \divide\epsfrsize\pspoints
175     \special{PSfile=#1 llx=\epsfllx\space lly=\epsflly\space
176     urx=\epsfurx\space ury=\epsfury\space rwi=\number\epsftmp\space
177     rhi=\number\epsfrsize \epsfclipstring}%
178     \fi
179     \hfil}}%
180     \global\epsfxsize=0pt\global\epsfysize=0pt}%
181     %
182     % We still need to define the tricky \epsfaux macro. This requires
183     % a couple of magic constants for comparison purposes.
184     %
185     {\catcode`\%=12 \global\let\epsfpercent=%\global\def\epsfbblit{%BoundingBox}}%
186     %
187     % So we're ready to check for `%BoundingBox:' and to grab the
188     % values if they are found.
189     %
190     \long\def\epsfaux#1#2:#3\\{\ifx#1\epsfpercent
191     \def\testit{#2}\ifx\testit\epsfbblit
192     \epsfgrab #3 . . . \\%
193     \epsffileokfalse
194     \global\epsfbbfoundtrue
195     \fi\else\ifx#1\par\else\epsffileokfalse\fi\fi}%
196     %
197     % Here we grab the values and stuff them in the appropriate definitions.
198     %
199     \def\epsfempty{}%
200     \def\epsfgrab #1 #2 #3 #4 #5\\{%
201     \global\def\epsfllx{#1}\ifx\epsfllx\epsfempty
202     \epsfgrab #2 #3 #4 #5 .\\\else
203     \global\def\epsflly{#2}%
204     \global\def\epsfurx{#3}\global\def\epsfury{#4}\fi}%
205     %
206     % We default the epsfsize macro.
207     %
208     \def\epsfsize#1#2{\epsfxsize}
209     %
210     % Finally, another definition for compatibility with older macros.
211     %
212     \let\epsffile=\epsfbox
213    

  ViewVC Help
Powered by ViewVC 1.1.22