diff options
author | Karl Berry <karl@freefriends.org> | 2006-01-12 23:46:03 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-01-12 23:46:03 +0000 |
commit | 873660d1a83ece926fe7206288dda9c36b349c1b (patch) | |
tree | a48f77125c309a355b5d0eb58d6b24446abe9d62 /Master/texmf-dist/tex/generic/tex-ps/epsfx.tex | |
parent | 2939242967231097459df0fc3150fabc2f639111 (diff) |
generic 1
git-svn-id: svn://tug.org/texlive/trunk@613 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/tex-ps/epsfx.tex')
-rw-r--r-- | Master/texmf-dist/tex/generic/tex-ps/epsfx.tex | 412 |
1 files changed, 412 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/tex-ps/epsfx.tex b/Master/texmf-dist/tex/generic/tex-ps/epsfx.tex new file mode 100644 index 00000000000..88d8e4cd948 --- /dev/null +++ b/Master/texmf-dist/tex/generic/tex-ps/epsfx.tex @@ -0,0 +1,412 @@ +%-------------------------------------------------------------------------- +% This is small extension of T. Rokicki's EPSF.TEX (from DVIPS 5.58): +% -- allows safe including of EPS files generated by DVIPS +% -- can also display bounding boxes. +%-------------------------------------------------------------------------- +% AUTHORS: Bogus\l{}aw Jackowski and Piotr Pianowski +% BOP s.c. +% ul. Piastowska 70, 80-363 Gda\'nsk, Poland +% email: B.Jackowski@GUST.org.pl +% USAGE: +% \eps{file.eps} % instead of \epsffile{file.eps} +% The following settings of the parameter \tracingeps are recognized: +% \tracingeps=0 % default, no extra information displayed +% \tracingeps=1 % displays bounding boxes and file names +% \tracingeps>1 % displays graphics, bounding boxes and file names +% HISTORY: +% ver. 0.5 19 VIII 1994 +% ver. 0.51 25 VIII 1994 +% * \epsnamecolor added +% ver. 0.52 31 VIII 1994 +% * \eps renamed to \epsraw +% * \tps renamed to \eps +% ver. 0.53 9 I 1995 +% * `\isls false N' added to \eps +% * virtually active slash neutralized +% ver. 0.54 9 III 1995 +% * \eps clears bop-hook +% ver. 0.55 27 III 1995 +% * a patch neutralizing unnecessary rounding added +% ver. 0.56 3 X 1995 +% * \special commands surrounding EPS box are to be nested in the \vbox +% ver. 0.57 31 VIII 1996 +% * odd characters in names enabled +% ver. 0.58 21 III 1997 +% * setpageparams and setpage neutralized +% ver. 0.585 25 III 1997 +% * comments touched +% ver. 0.59 7 VI 1998 +% * EPSF.TEX included +% ver. 0.60 10 I 1999 +% * safe multiplication of eps dimensions by 10 (expected to be +% included in the newest version of Rokicki's package) +% ver. 0.61 29 III 2000 +% * \eps expands to \hbox +% ver. 0.62 13 (Friday) VII 2001 +% * setpagedevice neutralized (why only now?) along with a bundle of +% commands specifying paper size (a0, a1, ... , b0, b1, ... , etc.) +%-------------------------------------------------------------------------- +\edef\slashcatcode{\the\catcode`\/} +\catcode`\/12 +% +%%%%%%%%%%%%%%%%%%%%%%%%%%% \input epsf -- inserted below %%%%%%%%%%%%%%%%% +% 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 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% End of EPSF %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% --- +\newcount\tracingeps \tracingeps0 +% --- +\newbox\tmpepsbox +% --- +\ifx\epsdirundefined\epsdir\def\epsdir{}\fi +\def\epsnamecolor{1 0 0} +% --- +% BOTH \eps and \epsraw ``normalize'' the eps name, as one may wish +% to use \epsraw separately +% --- +\def\epsraw{\begingroup\escapechar-1\catcode`\%12\def~{\string~}\epsrawcont} +\def\epsrawcont#1{% + \xdef\theepsname{\expandafter\string\csname#1\endcsname}\endgroup + \ifnum\tracingeps=0 \hbox{\epsffile{\epsdir\theepsname}}\fi + \ifnum\tracingeps>0 + \hbox{\setbox\tmpepsbox\hbox{\epsffile{\epsdir\theepsname}}% + \ifnum\tracingeps>1 \rlap{\copy\tmpepsbox}\fi + \vbox{\offinterlineskip + \hrule\vskip-.4pt + \hbox to\wd\tmpepsbox{\vrule\hss\vbox to\ht\tmpepsbox{ + \vss\hbox{\tt \special{ps:gsave \epsnamecolor\space setrgbcolor}% + \theepsname\special{ps:grestore}}\vss}\hss\vrule} + \vskip-.4pt\hrule + }}\fi} +% --- +\def\eps{\hbox\bgroup + \begingroup \escapechar-1 \catcode`\%12 \def~{\string~}\epscont} +\def\epscont#1{% + \xdef\theepsname{\expandafter\string\csname#1\endcsname}\endgroup + \vbox{\special{ps: /SItps save N /isls false N + statusdict begin + /setpageparams {pop pop pop pop} def /setpage {pop pop pop} def + end + userdict begin + /bop-hook {} def /setpagedevice {pop} def + /a0 {} def /a1 {} def /a2 {} def /a3 {} def /a4 {} def /a5 {} def + /a6 {} def /a7 {} def /a8 {} def /a9 {} def /a10 {} def + /b0 {} def /b1 {} def /b2 {} def /b3 {} def /b4 {} def /b5 {} def + /letter {} def /note {} def /legal {} def + /halfletter {} def /11x17 {} def /ledger {} def + /flsa {} def /flse {} def + end }% + \epsraw\theepsname\special{ps: SItps restore }}\egroup} +% --- +% Redefinition of epsf macros: +% +% The values of `rwi' and `rhi' parameters are to be given in tenths +% of big point; the older version of the epsf package used to multiply +% a dimen register by 10, which put severe limitations on the +% available EPS size. +% +% The macro `\decimalshift' multiplies a given value by 10 ``syntactically,'' +% i.e., accomplishes ``decimal shifting''; the following conditions +% are assumed to hold: +% * leading zeros are meaningless; +% * <digit>+<period><dimen unit> is a proper form of a dimen value; +% * the command `\the' applied to a dimen register yields a canonical form: +% [<minus>]<digit>+[<period><digit>+]<pt unit> +% where <pt unit> are `p' and `t' characters having category code 12. +% +\def\decimalshift#1{% #1 -- a dimen register + \expandafter\expandafter\expandafter + \decimalsplit\expandafter\gobblePT\the#1.\relax +}% +\def\decimalsplit#1.#2\relax{% + \ifnum#1=0 \ifdim#11sp=-1sp -\fi \else #1\fi + \ifdim0#2sp=0sp 0\else \fractionshift#2\fi +}% +\def\fractionshift#1#2.{\ifnum0#2=0 #1\else #1.#2\fi}% +{\catcode`\p12 \catcode`\t12 \gdef\gobblePT#1pt{#1}}% +\def\pttobp{0.99626401}% = 72/72.27 +% --- +\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=\pttobp\epsfxsize + \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=\decimalshift\epsftmp + \epsfclipstring}% + \else + \epsfrsize=\pttobp\epsfysize + \special{PSfile=\ifepsfdraft psdraft.ps\else#1\fi\space + llx=\epsfllx\space lly=\epsflly\space + urx=\epsfurx\space ury=\epsfury\space + rwi=\decimalshift\epsftmp\space + rhi=\decimalshift\epsfrsize + \epsfclipstring}% + \fi + \hfil}}% +\global\epsfxsize=0pt\global\epsfysize=0pt}% +% --- +\catcode`\/\slashcatcode +% --- +\endinput |