diff options
Diffstat (limited to 'macros/generic/boxedeps/boxedeps.tex-old')
-rw-r--r-- | macros/generic/boxedeps/boxedeps.tex-old | 861 |
1 files changed, 861 insertions, 0 deletions
diff --git a/macros/generic/boxedeps/boxedeps.tex-old b/macros/generic/boxedeps/boxedeps.tex-old new file mode 100644 index 0000000000..73113c21b1 --- /dev/null +++ b/macros/generic/boxedeps/boxedeps.tex-old @@ -0,0 +1,861 @@ + %% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %% + %%%%% boxedeps.tex + %%%%% MACROS FOR FIGURE INSERTS OF EPSF NORM %%%%% + %%%%% (EPSF = Encapsulated PostScript File) + %% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %% + %%% AUTHOR: Laurent Siebenmann + %% lcs@topo.math.u-psud.fr + %% + %%% VERSIONS: Feb 1991 -- Feb 1995 + %% Revisions bi-annual approx. + %% + %%% SOMMAIRE: boxedeps.tex d\'efinit des macro-commandes + %% qui permettent d'int\'egrer dans un document TeX des + %% objets graphiques d\'ecrits par fichier de norme EPSF, + %% tout en accordant a chacun le statut d'une bo\^ite TeX ayant + %% les bonnes dimensions. La (seule!) contribution unique + %% de ce fichier est de faire cela d'une fa{\c}con universelle. + %% C'est a dire de fa{\c}con \`a pouvoir commod\'ement + %% servir avec tout pilote d'imprimante de norme + %% PostScript --- malgr\'e l'absence d'une norme + %% pour \special. + %% + %%%% ACTIVATION: + %% by a driver-by-driver protocol + %% see \SetTexturesEPSFSpecial + %% and its companions below. + %% + %%%% DOCUMENTATION: + %% --- see boxedeps.doc + %% The complete utility is called BoxedEPSF + %% + %%%% POSTINGS: anonymous ftp + %% --- ftp matups.math.u-psud.fr [192.54.146.4] + %% is the master copy in 1994. + %% --- ftp.uni-stuttgart.de + %% --- ftp ftp.TeX.AC.UK + %% --- ftp ftp.SHSU.edu + %% Locate the full package on these three + %% "CTAN" servers by using (while connected) the command + %% QUOTE SITE INDEX boxedeps + + %%%% RECENT ADDITIONS: \SetepsfEPSFSpecial simultaneously serves + %% dvips, the Y&Y drivers, DirectTeX, CMacTeX, OzTeX>=1.7 + %% \SetOldOzTeXEPSFSpecial %% OzTeX 1.42--1.6x + + \ifx\MYUNDEFINED\BoxedEPSF + \let\temp\relax + \else + \message{} + \message{ !!! \string\BoxedEPSF or \string\BoxedArt % + macros already defined !!!} + \let\temp\endinput + \fi + \temp + + \chardef\EPSFCatAt\the\catcode`\@ + \catcode`\@=11 + + \chardef\C@tColon\the\catcode`\: + \chardef\C@tSemicolon\the\catcode`\; + \chardef\C@tQmark\the\catcode`\? + \chardef\C@tEmark\the\catcode`\! + \chardef\C@tDqt\the\catcode`\" + + \def\PunctOther@{\catcode`\:=12 + \catcode`\;=12 \catcode`\?=12 \catcode`\!=12 \catcode`\"=12} + \PunctOther@ + + %%temporarily suppress Plain's logging of allocations + \let\wlog@ld\wlog + \def\wlog#1{\relax} + + %% New for TOOLS + %\newif\ifIN@ + \newdimen\XShift@ \newdimen\YShift@ + \newtoks\Realtoks + + %%% New for BoxedEPSF + % + \newdimen\Wd@ \newdimen\Ht@ + \newdimen\Wd@@ \newdimen\Ht@@ + % + \newdimen\TT@ + \newdimen\LT@ + \newdimen\BT@ + \newdimen\RT@ + % + \newdimen\XSlide@ \newdimen\YSlide@ + % + \newdimen\TheScale %% secretly scale in mils: 1pt= 1mil + \newdimen\FigScale %% secretly scale in mils: 1pt= 1mil + % + \newdimen\ForcedDim@@ + + \newtoks\EPSFDirectorytoks@ + \newtoks\EPSFNametoks@ + \newtoks\BdBoxtoks@ + \newtoks\LLXtoks@ %% useful info for Oz + \newtoks\LLYtoks@ + \newtoks\URXtoks@ %% further useful epsf.tex syntax + \newtoks\URYtoks@ + + + \newif\ifNotIn@ + \newif\ifForcedDim@ + \newif\ifForceOn@ + \newif\ifForcedHeight@ + \newif\ifPSOrigin + + \newread\EPSFile@ + + %%%% MESSAGES (separate macro best for Europe) + %% + \def\ms@g{\immediate\write16} + + %%%% WORD-PROCESSING MACROS + %% + %%% \IN@0#1@#2@ : Is 1st exp of #1 in 1st exp of #2 ?? + %% Answer in \ifIN@ + \newif\ifIN@\def\IN@{\expandafter\INN@\expandafter} + \long\def\INN@0#1@#2@{\long\def\NI@##1#1##2##3\ENDNI@ + {\ifx\m@rker##2\IN@false\else\IN@true\fi}% + \expandafter\NI@#2@@#1\m@rker\ENDNI@} + \def\m@rker{\m@@rker} + + %%% \SPLIT@0#1@#2@ : Split 1st exp of #2 at 1st exp of #1 + %% \Initialtoks@ , \Terminaltoks@ will contain pieces + \newtoks\Initialtoks@ \newtoks\Terminaltoks@ + \def\SPLIT@{\expandafter\SPLITT@\expandafter} + \def\SPLITT@0#1@#2@{\def\TTILPS@##1#1##2@{% + \Initialtoks@{##1}\Terminaltoks@{##2}}\expandafter\TTILPS@#2@} + + %%%% MACROS TO TRIM \ForeTrim@0#1@ and \Trim@0#1@ + %% result appears in \Trimtoks@ + %% LIMITATION: assume no multiple spaces to trim + + \newtoks\Trimtoks@ + + %%% \ForeTrim@0#1@ trims initial space of first erpansion of #1 + %% #1 of form \the\toks0 or \mymacro + \def\ForeTrim@{\expandafter\ForeTrim@@\expandafter} + \def\ForePrim@0 #1@{\Trimtoks@{#1}} + \def\ForeTrim@@0#1@{\IN@0\m@rker. @\m@rker.#1@% + \ifIN@\ForePrim@0#1@% + \else\Trimtoks@\expandafter{#1}\fi} + %%\m@rker expands here to \m@@rker since spot initial, + %% so no confusuion with \m@rker + + %%% \Trim@0#1@ trims init and terminal spaces + %% Same syntax. + %% Warns if internal spaces found. + %% + \def\Trim@0#1@{% + \ForeTrim@0#1@% + \IN@0 @\the\Trimtoks@ @% + \ifIN@ + \SPLIT@0 @\the\Trimtoks@ @\Trimtoks@\Initialtoks@ + \IN@0\the\Terminaltoks@ @ @% + \ifIN@ + \else \Trimtoks@ {FigNameWithSpace}% + \fi + \fi + } + + + %%%% MATH MACROS (provisional) + %% use dimen registers for reals; unit 1pt + %% (numerical dimension arguments OK unless contrary noted) + + %%%% One needs the point token seq (pt with cat 12) USES dimen 0 + \newtoks\pt@ks + \def\getpt@ks 0.0#1@{\pt@ks{#1}} + \dimen0=0pt\relax\expandafter\getpt@ks\the\dimen0@ + + %%% Convert dimen to "decimal multiplier"% USES dimens 0,2 + %\newtoks\Realtoks% the output! + \def\Real#1{% + \dimen2=#1% + \SPLIT@0\the\pt@ks @\the\dimen2@%% lop off the points + \Realtoks=\Initialtoks@ %\showthe\Realtoks + } + + %%% Multiplication + % USES dimens 0,2,4,6; preserves args; output \Product + \newdimen\Product + \def\Mult#1#2{% + \dimen4=#1\relax + \dimen6=#2% + \Real{\dimen4}% + \Product=\the\Realtoks\dimen6% + } + + %%% Inverse + % USES dimens 0; preserves arg; output \Inverse + \newdimen\Inverse + \newdimen\hmxdim@ \hmxdim@=8192pt%halfmaxdimen + \def\Invert#1{% + \Inverse=\hmxdim@ + \dimen0=#1% + \divide\Inverse \dimen0% + \multiply\Inverse 8} + + %%% \Rescale#1#2#3 % USES dimens 0,2,4,6 + %% alters dimen register #1 by ratio #2/#3 + %% where #2,#3 can be raw dimensions OR dimen registers + \def\Rescale#1#2#3{% Adequate accuracy. Can improve. + \divide #1 by 100\relax + \dimen2=#3\divide\dimen2 by 100 \Invert{\dimen2}% + \Mult{#1}{#2}% + \Mult\Product\Inverse + #1=\Product} + + %%% \Scale#1 scales dimen register #1 + %% by dimen register real \TheScale; USES dimens 0 + \def\Scale#1{\dimen0=\TheScale + \divide #1 by 1280 %% 1280*5120*10=1000*2^16 + \divide \dimen0 by 5120 + \multiply#1 by \dimen0 + \divide#1 by 10 %% max size of #1 about 32000/10 pt + } + + %%% SCRUNCHING BOXES AND SHIFTING CONTENTS + %% TeX has to do this in general + %% since some drivers do not let + %% one do it readily using Postscript + + \newbox\scrunchbox + + %%% \Scrunched#1 puts #1 in an hbox + %% then in effect zeros the dimensions of this box + \def\Scrunched#1{{\setbox\scrunchbox\hbox{#1}% + \wd\scrunchbox=0pt + \ht\scrunchbox=0pt + \dp\scrunchbox=0pt + \box\scrunchbox}} + + %%% \Shifted@#1 puts #1 in \hbox + %% then locates basepoint to bottom left corner + %% then translates ink only by \XShift@,\YShift@ + %% with Postscript convention + %% For simplicity use only on scrunched boxes + %\newdimen\XShift@ + %\newdimen\YShift@ + \def\Shifted@#1{% + \vbox {\kern-\YShift@ + \hbox {\kern\XShift@\hbox{#1}\kern-\XShift@}% + \kern\YShift@}} + + %%% \cBoxedEPSF#1 the main macro + %% component macros are explained in order below + + \def\cBoxedEPSF#1{{\leavevmode + %% double brace for amstex \allign, \alligned, ... + \ReadNameAndScale@{#1}% + \SetEPSFSpec@ + \ReadEPSFile@ \ReadBdB@x + %% Calculations + \TrimFigDims@ + \CalculateFigScale@ + \ScaleFigDims@ + \SetInkShift@ + \hbox{$\mathsurround=0pt\relax + \vcenter{\hbox{% + \FrameSpider{\hskip-.4pt\vrule}% + \vbox to \Ht@{\offinterlineskip\parindent=\z@% + \FrameSpider{\vskip-.4pt\hrule}\vfil + \hbox to \Wd@{\hfil}% + \vfil + \InkShift@{\EPSFSpecial{\EPSFSpec@}{\FigSc@leReal}}% + \FrameSpider{\hrule\vskip-.4pt}}% + \FrameSpider{\vrule\hskip-.4pt}}}% + $\relax}% + \CleanRegisters@ + \ms@g{ *** Box composed for the % + EPS file \the\EPSFNametoks@}% + }} + + \def\tBoxedEPSF#1{\setbox4\hbox{\cBoxedEPSF{#1}}% + \setbox4\hbox{\raise -\ht4 \hbox{\box4}}% + \box4 + } + + \def\bBoxedEPSF#1{\setbox4\hbox{\cBoxedEPSF{#1}}% + \setbox4\hbox{\raise \dp4 \hbox{\box4}}% + \box4 + } + + \let\BoxedEPSF\cBoxedEPSF% default setting + + %% Some compatibility with BoxedArt.tex + % + \let\BoxedArt\BoxedEPSF + + %% Some compatibility with Sweet-teX + % + \def\gLinefigure[#1scaled#2]_#3{% + \BoxedEPSF{#3 scaled #2}} + + %% Some compatibility with Rokicki's dvips + % + \let\EPSFbox\bBoxedEPSF \let\EPSFfile\bBoxedEPSF + + \def\EPSFxsize{\afterassignment\ForceW@\ForcedDim@@} + \def\ForceW@{\ForcedDim@true\ForcedHeight@false} + + \def\EPSFysize{\afterassignment\ForceH@\ForcedDim@@} + \def\ForceH@{\ForcedDim@true\ForcedHeight@true} + + \def\EmulateRokicki{% + \let\epsfbox\bBoxedEPSF \let\epsffile\bBoxedEPSF + \let\epsfxsize\EPSFxsize \let\epsfysize\EPSFysize} + + %%% \ReadNameAndScale@#1 + % + \def\ReadNameAndScale@#1{\IN@0 scaled@#1@% DOUBLE BARRELED + \ifIN@\ReadNameAndScale@@0#1@% + \else \ReadNameAndScale@@0#1 scaled\DefaultMilScale @% + \fi} + + \def\ReadNameAndScale@@0#1scaled#2@{% HELPER MACRO + \let\OldBackslash@\\% + \def\\{\OtherB@ckslash}% + \edef\temp@{#1}% + \Trim@0\temp@ @% + \EPSFNametoks@\expandafter{\the\Trimtoks@ }% + \FigScale=#2 pt% + \let\\\OldBackslash@ + } + + \def\SetDefaultEPSFScale#1{% + \global\def\DefaultMilScale{#1}} + + \SetDefaultEPSFScale{1000} + + + %%% \ReadEPSFile@ + % + \def \SetBogusBbox@{% + \global\BdBoxtoks@{ BoundingBox:0 0 100 100 }% + \global\def\BdBoxLine@{ BoundingBox:0 0 100 100 }% + \ms@g{ !!! Will use placeholder !!!}% + } + + {\catcode`\%=12\gdef\P@S@{%!}\gdef\pct@@{%%}} %% %! min sign of PS file + + \def\ReadEPSFile@{%\show\EPSFSpec@% + \openin\EPSFile@\EPSFSpec@ + \relax %necessary to prevent precocious expansion of \ifeof + \ifeof\EPSFile@ + \ms@g{}% + \ms@g{ !!! EPS FILE \the\EPSFDirectorytoks@ + \the\EPSFNametoks@\space WAS NOT FOUND !!!}% + \SetBogusBbox@ + \else%\fi + \begingroup%% + \catcode`\%=12\catcode`\:=12\catcode`\!=12 + \catcode"00=14 \catcode"7F=14 \catcode`\\=14 + %% 14 = comment, terminates input line; + %% 5 = CR just picks up extra space + \global\read\EPSFile@ to \BdBoxLine@ %\show\BdBoxLine@ + \IN@0\P@S@ @\BdBoxLine@ @% + \ifIN@ %% %! accepted as %!PS so do BdBox search!! + \NotIn@true + \loop + \ifeof\EPSFile@\NotIn@false + \ms@g{}% + \ms@g{ !!! BoundingBox NOT FOUND IN % + \the\EPSFDirectorytoks@\the\EPSFNametoks@\space!!! }% + \SetBogusBbox@ + \else\global\read\EPSFile@ to \BdBoxLine@ + %\show\BdBoxLine@ + \fi + \global\BdBoxtoks@\expandafter{\BdBoxLine@}% + \IN@0BoundingBox:@\the\BdBoxtoks@ @% + \ifIN@\NotIn@false\fi% + \ifNotIn@ + \repeat + \else + \ms@g{}% + \ms@g{ !!! \the\EPSFNametoks@\space is not PostScript.}% + \ms@g{ !!! It should begin with the "\P@S@". }% + \ms@g{ !!! Also, all other header lines until }% + \ms@g{ !!! "\pct@@ EndComments" should begin with "\pct@@". }% + \SetBogusBbox@ + \fi + \endgroup\relax + \fi + \closein\EPSFile@ + } + + + %%% \ReadBdB@x + % Rmk For simplicity 0 not used in syntax + % of \ReadBdB@x@, \ReadBdB@x@@ + \def\ReadBdB@x{% PART 0 + \expandafter\ReadBdB@x@\the\BdBoxtoks@ @} + + \def\ReadBdB@x@#1BoundingBox:#2@{% PART 1 + \ForeTrim@0#2@% + \IN@0atend@\the\Trimtoks@ @% + \ifIN@ \Trimtoks@={0 0 100 100 }% + \ms@g{}% + \ms@g{ !!! BoundingBox not found in % + \the\EPSFDirectorytoks@\the\EPSFNametoks@\space !!!}% + \ms@g{ !!! It must not be at end of EPSF !!!}% + \ms@g{ !!! Will use placeholder !!!}% + \fi%% cf \SetBogusBbox@ + \expandafter\ReadBdB@x@@\the\Trimtoks@ @% + } + + \def\ReadBdB@x@@#1 #2 #3 #4@{% PART 2 + \Wd@=#3bp\advance\Wd@ by -#1bp% + \Ht@=#4bp\advance\Ht@ by-#2bp% + \Wd@@=\Wd@ \Ht@@=\Ht@ %% useful info for Clark + \LLXtoks@={#1}\LLYtoks@={#2}%% useful for Oz + \URXtoks@={#3}\URYtoks@={#4}%% useful for epsf.tex + \ifPSOrigin\XShift@=-#1bp\YShift@=-#2bp\fi + } + + %%% \SetEPSFDirectory + % + \def\G@bbl@#1{} + \bgroup + \global\edef\OtherB@ckslash{\expandafter\G@bbl@\string\\} + \egroup + + \def\SetEPSFDirectory{% Part 1 + \bgroup\PunctOther@\relax + \let\\\OtherB@ckslash + \SetEPSFDirectory@} + + \def\SetEPSFDirectory@#1{% Part 2 + \edef\temp@{#1}% + \Trim@0\temp@ @% result in \Trimtoks@ + \global\toks1\expandafter{\the\Trimtoks@ }\relax + \egroup + \EPSFDirectorytoks@=\toks1 + } + + \def\SetEPSFSpec@{% + \bgroup + \let\\=\OtherB@ckslash + \global\edef\EPSFSpec@{% + \the\EPSFDirectorytoks@\the\EPSFNametoks@}% + \global\edef\EPSFSpec@{\EPSFSpec@}% + \egroup} + + %%% \TrimFigDims@ + % + \def\TrimTop#1{\advance\TT@ by #1} + \def\TrimLeft#1{\advance\LT@ by #1} + \def\TrimBottom#1{\advance\BT@ by #1} + \def\TrimRight#1{\advance\RT@ by #1} + + \def\TrimBoundingBox#1{% + \TrimTop{#1}% + \TrimLeft{#1}% + \TrimBottom{#1}% + \TrimRight{#1}% + } + + \def\TrimFigDims@{% + \advance\Wd@ by -\LT@ + \advance\Wd@ by -\RT@ \RT@=\z@ + \advance\Ht@ by -\TT@ \TT@=\z@ + \advance\Ht@ by -\BT@ + } + + + %%% \CalculateFigScale@ + % + \def\ForceWidth#1{\ForcedDim@true + \ForcedDim@@#1\ForcedHeight@false} + + \def\ForceHeight#1{\ForcedDim@true + \ForcedDim@@=#1\ForcedHeight@true} + + \def\ForceOn{\ForceOn@true} + \def\ForceOff{\ForceOn@false\ForcedDim@false} + + \def\CalculateFigScale@{% + %Have default \FigScale or read \FigScale + \ifForcedDim@\FigScale=1000pt% %% start afresh + \ifForcedHeight@ + \Rescale\FigScale\ForcedDim@@\Ht@ + \else + \Rescale\FigScale\ForcedDim@@\Wd@ + \fi + \fi + \Real{\FigScale}% + \edef\FigSc@leReal{\the\Realtoks}% + } + + \def\ScaleFigDims@{\TheScale=\FigScale + \ifForcedDim@ + \ifForcedHeight@ \Ht@=\ForcedDim@@ \Scale\Wd@ + \else \Wd@=\ForcedDim@@ \Scale\Ht@ + \fi + \else \Scale\Wd@\Scale\Ht@ + \fi + \ifForceOn@\relax\else\global\ForcedDim@false\fi + \Scale\LT@\Scale\BT@ %%%\Scale\Wd@\Scale\Ht@ + \Scale\XShift@\Scale\YShift@ + } + + %%% \ShowDisplacementBoxes + %% shows (prints) corrected scaled and positioned + %% bounding boxes; for diagnostics + %%% \HideDisplacementBoxes makes them invisible again + %% + \def\HideDisplacementBoxes{\global\def\FrameSpider##1{\null}} + \def\ShowDisplacementBoxes{\global\def\FrameSpider##1{##1}} + \let\HideFigureFrames\HideDisplacementBoxes %% some synonyms + \let\ShowFigureFrames\ShowDisplacementBoxes + \ShowDisplacementBoxes + + %%% \hSlide#1, \vSlide#1 + %% + \def\hSlide#1{\advance\XSlide@ by #1} + \def\vSlide#1{\advance\YSlide@ by #1} + + %%% \SetInkShift@, \InkShift@#1 + %% + \def\SetInkShift@{% + \advance\XShift@ by -\LT@ + \advance\XShift@ by \XSlide@ + \advance\YShift@ by -\BT@ + \advance\YShift@ by -\YSlide@ + } + % + \def\InkShift@#1{\Shifted@{\Scrunched{#1}}} + + %%% \CleanRegisters@ + % + \def\CleanRegisters@{% + \globaldefs=1\relax + \XShift@=\z@\YShift@=\z@\XSlide@=\z@\YSlide@=\z@ + \TT@=\z@\LT@=\z@\BT@=\z@\RT@=\z@ + \globaldefs=0\relax} + + %%% Special syntax for several drivers. The macros + %% \SetTexturesEPSFSpecial %% Textures + %% \SetUnixCoopEPSFSpecial %% dvi2ps early unix + %% \SetBechtolsheimDVI2PSEPSFSpecial and + %% \SetBechtolsheimDVITPSEPSFSpecial %% by S.P.Bechtolsheim + %% \SetLisEPSFSpecial %% dvi2ps by Tony Lis + %% \SetepsfEPSFSpecial %% ******* will work for many: + %% ----- dvips, the Y&Y drivers, DirectTeX, CMacTeX, OzTeX>=1.7 + %% \SetRokickiEPSFSpecial %% dvips by Tom Rokicki + %% \SetDVIPSoneEPSFSpecial %% DVIPSONE of Y&Y same as + %% \SetDVIWindowEPSFSpecial %% DVIWindow of Y&Y + %% \SetDirectTeXEPSFSpecial %% DirectTeX by Wilfried Ricken + %% \SetCMacTeXEPSFSpecial %% CMacTeX by Tom Kiffe + %% \SetOzTeXEPSFSpecial %% OzTeX (>=1.7) by Andrew Trevorrow + %% ----- + %% \SetOldOzTeXEPSFSpecial %% OzTeX 1.42--1.6x + %% \SetPSprintEPSFSpecial %% PSprint by Andrew Trevorrow + %% --- also for OzTeX versions <= 1.41 !! + %% \SetArborEPSFSpecial %% ArborTeX DVILASER/PS + %% \SetClarkEPSFSpecial %% dvitops by James Clark + %% \SetBeebeEPSFSpecial %% DVIALW by N. Beebe + %% \SetNorthlakeEPSFSpecial %% Northlake Software + %% \SetStandardEPSFSpecial %% Nonexistant: Placebo used + %% + %% These many drivers are supported roughly + %% by (re-)defining the macro \EPSFSpecial#1#2, where + %% #1 = EPS file pathname (use \\ for the letter backslash) + %% #2 = scale in mils + %% Be wary of using strange characters in pathnames! + + %% Textures, Blue Sky Research, Barry Smith + \def\SetTexturesEPSFSpecial{\PSOriginfalse%\PSOrigintrue + \gdef\EPSFSpecial##1##2{\relax + \edef\specialtemp{##2}% + \SPLIT@0.@\specialtemp.@\relax + \special{illustration ##1 scaled + \the\Initialtoks@}}} + + %% Unix : dvi2ps by: Mark Senn, Stephan Bechtolsheim, + % Bob Brown, Richard, Furuta, James Schaad, Robert Wells, + % Norm Hutchinson, Neal Holt, Scott Jones, Howard Trickey. + % Introduced by B. Horn <bkph@ai.mit.edu> + \def\SetUnixCoopEPSFSpecial{\PSOrigintrue % Please test! + \gdef\EPSFSpecial##1##2{% + \dimen4=##2pt% convert real to dimen + \divide\dimen4 by 1000\relax + \Real{\dimen4}%dimens 0,2 used here + \edef\Aux@{\the\Realtoks}% + %%convert dimen to real + \special{psfile=##1\space + hscale=\Aux@\space + vscale=\Aux@}}} + + + %% dvi2ps and dvitps by S.P. Bechtolsheim, + % Introduced by B. Horn <bkph@ai.mit.edu> and Carl.M.Jones, + % testing by R. Evans <Robert@cm.cardiff.ac.uk> + % and George Denk <denk@mathematik.tu-muenchen.de> + % Note that a prolog file psfig.pro + % specific to the driver should be available. + \def\SetBechtolsheimEPSFSpecial@{%% tool macro only + \PSOrigintrue + \special{\DriverTag@ Include0 "psfig.pro"}% + \gdef\EPSFSpecial##1##2{% + \dimen4=##2pt %% convert real to dimen + \divide\dimen4 by 1000\relax + \Real{\dimen4} %% dimens 0,2 used here + \edef\Aux@{\the\Realtoks}%% convert dimen to real + \special{\DriverTag@ Literal "10 10 0 0 10 10 startTexFig + \the\mag\space 1000 div + dup 3.25 neg mul 1 index .25 neg mul translate %% correction line + \Aux@\space mul dup scale "}% + \special{\DriverTag@ Include1 "##1"}% + \special{\DriverTag@ Literal "endTexFig "}% + }} + + \def\SetBechtolsheimDVITPSEPSFSpecial{\def\DriverTag@{dvitps: }% + \SetBechtolsheimEPSFSpecial@} + + \def\SetBechtolsheimDVI2PSEPSFSSpecial{\def\DriverTag@{DVI2PS: }% + \SetBechtolsheimEPSFSpecial@} + + %% dvi2ps by Tony Lis, + % implantations? ; dates?; availability? + % Introduced by B. Horn <bkph@ai.mit.edu> + \def\SetLisEPSFSpecial{\PSOrigintrue + \gdef\EPSFSpecial##1##2{% + \dimen4=##2pt% convert real to dimen + \divide\dimen4 by 1000\relax + \Real{\dimen4}% dimens 0,2 used here + \edef\Aux@{\the\Realtoks}% + %%convert dimen to real + \special{pstext="10 10 0 0 10 10 startTexFig\space + \the\mag\space 1000 div \Aux@\space mul + \the\mag\space 1000 div \Aux@\space mul scale"}% + \special{psfile=##1}% + \special{pstext=endTexFig}% + }} + + %% dvips by Tom Rokicki; free driver in portable C + % Introduced by W.D. Neumann <neumann@mps.ohio-state.edu> + \def\SetRokickiEPSFSpecial{\PSOrigintrue + \gdef\EPSFSpecial##1##2{% + \dimen4=##2pt% convert real to dimen + \divide\dimen4 by 10\relax + \Real{\dimen4}% dimens 0,2 used here + \edef\Aux@{\the\Realtoks}% + %%convert dimen to real + \special{psfile="##1"\space + hscale=\Aux@\space + vscale=\Aux@}}} + + \def\SetInlineRokickiEPSFSpecial{\PSOrigintrue + \gdef\EPSFSpecial##1##2{% + \dimen4=##2pt% convert real to dimen + \divide\dimen4 by 1000\relax + \Real{\dimen4}% dimens 0,2 used here + \edef\Aux@{\the\Realtoks}% + %%convert dimen to real + \special{ps::[begin] 10 10 0 0 10 10 startTexFig\space + \the\mag\space 1000 div \Aux@\space mul + \the\mag\space 1000 div \Aux@\space mul scale}% + \special{ps: plotfile ##1}% + \special{ps::[end] endTexFig}% + }} + + %%% Rokicki's epsf.tex syntax. + %% Is followed by DirectTeX (W. Ricken) + %% CMacTeX (Tom Kiffe), Y&Y's drivers, and OzTeX >= 1.7 + \def\SetepsfEPSFSpecial{\PSOriginfalse + \gdef\epsfclipstring{}% + %% make { clip} if you want to clip (non-portably) + %% down to the PostScript bounding box. + \gdef\EPSFSpecial##1##2{% + \dimen6=\the\URXtoks@ pt %% not bp!!!!! + \advance\dimen6 by -\the\LLXtoks@ pt + %% \dimen6 now bbox width * points + \dimen4=##2pt %% convert mil scale to dimen + \divide\dimen4 by 100 %% 1000ths to 10ths + \Real{\dimen4}%% dimens 0,2 used here + \dimen6=\the\Realtoks\dimen6 + \Real{\dimen6}%% dimens 0,2 used here + %% \Realtoks now holds decimal real no + %% 10 times desired "real width" (rwi) in bp + \special{PSfile=##1\space + llx=\the\LLXtoks@\space lly=\the\LLYtoks@\space + urx=\the\URXtoks@\space ury=\the\URYtoks@\space + rwi=\the\Realtoks\space + \epsfclipstring}% + }} + %% Minor Bug (my laziness): scaling not performed if bb width zero + %% Rmk: Under epsf.tex only multiples of (1/10) bp available widths + %% but considerably more accuracy available here. + + \let\SetDirectTeXEPSFSpecial=\SetepsfEPSFSpecial + \let\SetCMacTeXEPSFSpecial=\SetepsfEPSFSpecial + \let\SetOzTeXEPSFSpecial=\SetepsfEPSFSpecial + %%% \SetOzTeXEPSFSpecial only for OzTeX in versions 1.7 and later + + %%% Old OzTeX versions (1.42 to 1.6), by Andrew Trevorrow. + %%% For versions <= 1.41 use \SetPSprintEPSFSpecial below. + %% Nota: Version 1.42--1.5 may give + %% spurious "offpage" error notices on printing. + \def\SetOldOzTeXEPSFSpecial{\PSOrigintrue + \gdef\EPSFSpecial##1##2{% + \dimen4=##2pt%% convert real to dimen + \divide\dimen4 by 1000\relax + \Real{\dimen4}%% dimens 0,2 used here + \edef\Aux@{\the\Realtoks}%% convert dimen to real + \special{epsf=\string"##1\string"\space scale=\Aux@}% + }} + + %% PSprint, by AndrewTrevorrow for VaX VMS + %% and OzTeX versions <= 1.41 + % tested 2-91 by Max Calviani <ISICA@ASTRPD.infn.it> + \def\SetPSprintEPSFSpecial{\PSOriginfalse % artifice; see below + \gdef\EPSFSpecial##1##2{%note order + \special{##1\space + ##2 1000 div \the\mag\space 1000 div mul + ##2 1000 div \the\mag\space 1000 div mul scale + \the\LLXtoks@\space neg \the\LLYtoks@\space neg translate + }}} + + %% DVILASER/PS driver originally written by David Fuchs + % marketed and supported by ArborTeXt 535 W. William St. + % Suite 300, Ann Arbor, MI 48103, U.S.A + % (313) 996-3566 (313) 996-3573 + % help@arbortext.com, Andrew Dobrowolski + \def\SetArborEPSFSpecial{\PSOriginfalse % check! + \gdef\EPSFSpecial##1##2{% + \edef\specialthis{##2}% + \SPLIT@0.@\specialthis.@\relax % suppress decimals (nec!) + \special{ps: epsfile ##1\space \the\Initialtoks@}}} + + %% dvitops, (c) James Clark <jjc@jclark.uucp> + % public domain; distributed by UK TeX Archive + % computers: unix, msdos, vms, primos and vm/cms, + % introduced by S. Ratz <spqr@uk.ac.southampton.ecs> + \def\SetClarkEPSFSpecial{\PSOriginfalse % please test! + \gdef\EPSFSpecial##1##2{% + \Rescale {\Wd@@}{##2pt}{1000pt}% + \Rescale {\Ht@@}{##2pt}{1000pt}% + \special{dvitops: import + ##1\space\the\Wd@@\space\the\Ht@@}}} + + %% DVIPSONE, for PC compatibles + % Y&Y, 106 Indian Hill, Carlisle MA 01741, USA + % (508) 371-3286 + % (introduced by B. Horn <bkph@ai.mit.edu>) + \let\SetDVIPSONEEPSFSpecial\SetepsfEPSFSpecial + \let\SetDVIPSoneEPSFSpecial\SetepsfEPSFSpecial + \let\SetDVIWindowEPSFSpecial\SetepsfEPSFSpecial + + %% DVIALW by N. Beebe, public domain + % DVI Driver Distribution, Center for Scientific Computing, + % Department of Mathematics, 220 South Physics Building, + % University of Utah, Salt Lake City, UT 84112, USA + % (introduced by B. Horn <bkph@ai.mit.edu>) + % Proposed standard; see TUGboat article 1993. + \def\SetBeebeEPSFSpecial{%please test! + \PSOriginfalse% + \gdef\EPSFSpecial##1##2{\relax + \special{language "PS", + literal "##2 1000 div ##2 1000 div scale", + position = "bottom left", + include "##1"}}} + \let\SetDVIALWEPSFSpecial\SetBeebeEPSFSpecial + + %% Northlake software + \def\SetNorthlakeEPSFSpecial{\PSOrigintrue + \gdef\EPSFSpecial##1##2{% + \edef\specialthis{##2}% + \SPLIT@0.@\specialthis.@\relax % suppress decimals (nec!) + \special{insert ##1,magnification=\the\Initialtoks@}}} + + %%% MultiSpecial for Textures PLUS drivers supporting epsf.tex + %%% syntax of Rokicki (one of many dvips syntaxes) + %% *experimental* 2-95 + \def\SetEPSFMultiSpecial{\PSOriginfalse + \csname newwrite\endcsname \EPSFile@@ + \immediate\openout\EPSFile@@ illustration + \immediate\write\EPSFile@@ {\P@S@}% + \immediate\write\EPSFile@@ {\pct@@ Remark: Tranquilizer for OzTeX...}% + \immediate\closeout\EPSFile@@ + \gdef\EPSFSpecial##1##2{%% epsf but have dropped \clipstring + \dimen6=\the\URXtoks@ pt %% not bp!!!!! + \advance\dimen6 by -\the\LLXtoks@ pt + %% \dimen6 now bbox width * points + \dimen4=##2pt %% convert mil scale to dimen + \divide\dimen4 by 100 %% 1000ths to 10ths + \Real{\dimen4}%% dimens 0,2 used here + \dimen6=\the\Realtoks\dimen6 + \Real{\dimen6}%% dimens 0,2 used here + %% \Realtoks now holds decimal real no + %% 10 times desired "real width" (rwi) in bp + \special{PSfile=##1\space + llx=\the\LLXtoks@\space lly=\the\LLYtoks@\space + urx=\the\URXtoks@\space ury=\the\URYtoks@\space + rwi=\the\Realtoks}% + % + \edef\specialtemp{##2}% + \SPLIT@0.@\specialtemp.@\relax + \special{illustration ##1 scaled \the\Initialtoks@}% + }} + + \def\SetStandardEPSFSpecial{% + \gdef\EPSFSpecial##1##2{% + \ms@g{} + \ms@g{% + !!! Sorry! There is still no standard for \string% + \special\space EPSF integration !!!}% + \ms@g{% + --- So you will have to identify your driver using a command}% + \ms@g{% + --- of the form \string\Set...EPSFSpecial, in order to get}% + \ms@g{% + --- your graphics to print.}% + \ms@g{% + Update your BoxedEPSF and read the documentation.}% + \ms@g{} + \gdef\EPSFSpecial####1####2{} + }} + + \SetStandardEPSFSpecial %% currently gives warning + + \let\wlog\wlog@ld %%restore logging + + \catcode`\:=\C@tColon + \catcode`\;=\C@tSemicolon + \catcode`\?=\C@tQmark + \catcode`\!=\C@tEmark + \catcode`\"=\C@tDqt + + \catcode`\@=\EPSFCatAt + + \endinput + +%%%%%%%%%%%% ASCII Character test + % + % Upper case letters: ABCDEFGHIJKLMNOPQRSTUVWXYZ + % Lower case letters: abcdefghijklmnopqrstuvwxyz + % Digits: 0123456789 + % Square, curly, angle braces, parentheses: [] {} <> () + % Backslash, slash, vertical bar: \ / | + % Punctuation: . ? ! , : ; + % Underscore, hyphen, equals sign: _ - = + % Quotes--right left double: ' ` " + %"at", "number" "dollar", "percent", "and": @ # $ % & + % "hat", "star", "plus", "tilde": ^ * + ~ + % + %%%%%%%%%%%%%%%%%%%%%%%% + % + % Une seule erreur de transmission peut empoisoner un programme! + % + % A single transmission error can poison a whole program. + % + %%%%%%%%%%%%%%%%%%%%%%%% |