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 |