| 0,0 → 1,803 |
| %% |
| %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
| %% |
| %%%%% BoxedEPS.tex FOR FIGURE INSERTS OF EPSF NORM %%%%% |
| %%%%% (EPSF = Encapsulated PostScript File) |
| %% |
| %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
| %% |
| %%% AUTHOR: Laurent Siebenmann |
| %% lcs@matups.matups.fr |
| %% |
| %%% VERSIONS: Feb 1991 -- October, 1992 |
| %% |
| %%% 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. |
| %% |
| %%% POSTINGS: anonymous ftp |
| %% --- ftp 130.84.128.100 (alias rsovax.circe.fr); |
| %% login: anonymous; password: <anything>; directory |
| %% [anonymous.siebenmann]. This is the master copy in 1992. |
| %% |
| %% --- ftp 129.69.1.12 (alias rusinfo.rus.uni-stuttgart.de); |
| %% login: anonymous; password: <anything>; |
| %% directory hints .../tex/graphics/... |
| %% |
| %%%% DOCUMENTATION: |
| %% --- see BoxedEPS.doc |
| %% |
| %%%% ACTIVATION: |
| %% by a driver-by-driver protocol |
| %% see \SetTexturesEPSFSpecial |
| %% and its companions below. |
| %% |
| |
| \ifx\MYUNDEFINED\BoxedEPSF |
| \let\temp\relax |
| \else |
| \message{} |
| \message{ !!! BoxedEPS % |
| or 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 Boxed EPSF |
| % |
| \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@ |
| |
| |
| \newif\ifNotIn@ |
| \newif\ifForcedDim@ |
| \newif\ifForceOn@ |
| \newif\ifForcedHeight@ |
| \newif\ifPSOrigin |
| |
| \newread\EPSFile@ |
| |
| %%%% MESSAGES (separate macro needed 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}}}% |
| $}% |
| \CleanRegisters@ |
| \ms@g{ *** Box composed for the % |
| EPSF 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@{%!}} %% %! 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`\G=14\catcode`\\=14\relax% 14 is comment |
| \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 not PS!\space !!!}% |
| \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 info for Oz |
| \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 |
| } |
| |
| %%% \SetEPSFSpec@ |
| \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@ |
| } |
| |
| %%% \ShowReservedBoxes |
| %% shows (prints) corrected scaled and positioned |
| %% bounding boxes; for diagnostics |
| %%% \HideReservedBoxes makes them invisible again |
| %% |
| \def\HideReservedBoxes{\global\def\FrameSpider##1{\null}} |
| \def\ShowReservedBoxes{\global\def\FrameSpider##1{##1}} |
| \let\HideDisplacementBoxes\HideReservedBoxes %% some synonyms |
| \let\ShowDisplacementBoxes\ShowReservedBoxes |
| \let\HideFigureFrames\HideReservedBoxes |
| \let\ShowFigureFrames\ShowReservedBoxes |
| \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 |
| %% \SetRokickiEPSFSpecial %% dvips by Tom Rokicki |
| %% --- also for DVIReader, in DirectTeX by W. Ricken |
| %% \SetOzTeXEPSFSpecial %% OzTeX (>=1.42) by Andrew Trevorrow |
| %% \SetPSprintEPSFSpecial %% PSprint by Andrew Trevorrow |
| %% --- also for OzTeX versions <= 1.41 !! |
| %% \SetArborEPSFSpecial %% ArborTeX DVILASER/PS |
| %% \SetClarkEPSFSpecial %% dvitops by James Clark |
| %% \SetDVIPSoneEPSFSpecial %% DVIPSONE of Y&Y |
| %% \SetBeebeEPSFSpecial %% DVIALW by N. Beebe |
| %% \SetNorthlakeEPSFSpecial %% Northlake Software |
| %% \SetStandardEPSFSpecial %% Nonexistant: Placebo below |
| %% Many drivers 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\specialthis{##2}% |
| \SPLIT@0.@\specialthis.@\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> |
| % 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 3.25 neg mul |
| \the\mag\space 1000 div .25 neg mul translate %% correction |
| \the\mag\space 1000 div \Aux@\space mul |
| \the\mag\space 1000 div \Aux@\space mul scale "}% |
| \special{\DriverTag@ Include1 "##1"}% |
| \special{\DriverTag@ Literal "endTexFig "}% |
| }} |
| |
| %% 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> |
| % 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 2 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}% |
| }} |
| |
| %%% OzTeX (versions 1.42 and later), by Andrew Trevorrow |
| %%% (for earlier versions see PSprint below!!) |
| %% complete public domain TeX for Macintosh |
| %% Send 10 UNFORMATTED 800K disks |
| %% with return postage to |
| %% Peter Abbott, Computing Service, |
| %% Aston University, Aston Triangle, Birmingham B4 7ET |
| %% Posting: ftp midway.uchicago.edu |
| %% Nota: Version 1.42 may give |
| %% spurious "offpage" error notices on printing. |
| %% Nota: Support for MacPaint files not here yet. |
| \def\SetOzTeXEPSFSpecial{\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\SetUnixCoopEPSFSpecial |
| \let\SetDVIPSoneEPSFSpecial\SetUnixCoopEPSFSpecial |
| |
| %% 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@}}} |
| |
| \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. See BoxedEPS.doc.}% |
| \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. |
| % |
| %%%%%%%%%%%%%%%%%%%%%%%% |
| Property changes: |
| Added: svn:executable |