% % Postscriptbox and psbox macros for use with dvips and pstex. % % Neil Hunt, Schlumberger Palo Alto Research. % hunt@spar.slb.com % % HISTORY % % $Log: postscript.sty,v $ % Revision 1.5 89/01/09 13:05:38 hunt % Updated to use a single .psz file per job rather than a .tps file % for each included figure. % % Revision 1.4 88/09/20 13:12:18 hunt % Cosmetic changes % % Revision 1.3 88/08/04 12:33:19 hunt % A new psbox feature has been added for use with pstex: % This replaces the old psbox, and simplifies things a lot. % % Revision 1.2 88/08/04 09:50:46 hunt % Added RXB's psbox hacks: % {1} 18-Apr-88 Rafael Bracho (rxb) at Schlumberger Austin Systems Center % The postscriptbox macros were created by Neil Hunt at SPAR, I've % added the psbox ones to use the InsertFile special. Since I % fixed InsertFile, I don't know if we still need the postscriptbox % special, though. % % Revision 1.1 88/08/04 09:41:01 hunt % Initial revision - useful with early embed program versions. % % % Primitive: postscriptbox macros. % =============================== % % \postscriptbox{w}{h}{file} Box of size w, h. % \postscriptbox(w,h){file} Picture env. box of size w, h. % \def \postscriptbox{\@ifnextchar ({\@postscriptpicbox}{\@postscriptbox}} \def \@postscriptpicbox(#1,#2)#3{% \@postscriptbox{#1\unitlength}{#2\unitlength}{#3}} \def \@postscriptbox#1#2#3{% \@xdim=#1\divide\@xdim 1000\multiply\@xdim\mag% \@ydim=#2\divide\@ydim 1000\multiply\@ydim\mag% \mbox{\vbox to #2{\vfil\hbox to #1% {\special{postscriptbox {\the\@xdim}{\the\@ydim}{#3}}\hfil}}}} % % Higher level macros. % =================== % % \psbox[dimensions-options]{psfile} % 1 \psbox writes to .aux ``\psboxaux[dimensions-options]{psfile}'' % 2 pstex reads .aux files, writes \pssize macros to .psz file. % 3 .psz file is input, defines size macros by figure name. % 4 \psbox invokes size macros for each figure. % % Counters to disambiguate multiple references to the same figure. % t@psctr counts multiple occurrences of psboxaux's in .aux file. % f@psctr counts multiple occurrences of pssize's in .psz file. \newcounter{t@psctr} \newcounter{f@psctr} \def\psbox{\@ifnextchar [{\@psbox}{\@psbox[]}} % % First we write an entry on the aux file: psboxaux[args]{filename} % Next we generate the handle f@name used for this figure: % we check whether the tag `t@' is defined: % If not, this is the first time PS file has been used, % so we def \f@name = f@, and define the tag t@. % Otherwise, this filename has been used before, and we will add % a unique number to the name to disambiguate: % we def \f@name = fN@ where N is the value of t@psctr++. % Now we try to access the \postscriptbox macro which is the expansion % of \f@name. If \f@name is undefined, we write a warning, and a placeholder. % \def\@psbox[#1]#2{% \if@filesw\immediate\write\@auxout{\string\psboxaux{#1}{#2}}\fi \@ifundefined{t@#2}% {\def\f@name{f@#2}\global\@namedef{t@#2}{\relax}}% % t@#2 undef'ed {\def\f@name{f\arabic{t@psctr}@#2}\stepcounter{t@psctr}}% t@#2 defined \@ifundefined{\f@name}{% \framebox[2in]{Figure {\tt #2}\rule[-1in]{0in}{2in}}% % \f@name undef \@warning{Figure `#2' on page \thepage \space undefined}}% {\csname \f@name \endcsname}} % \f@name def'd % % Prepare to read the .aux file: % Define psboxaux as null; it is only used as a flag for pstex. % \let\psboxaux\@gobbletwo % % Prepare to read the .psz file: % Define \pssize as a macro to build f@name in an identical manner to % above, and then define \f@name as the proper \postscriptbox macro. % \def\pssize#1#2#3{% \@ifundefined{f@#3}% {\def\f@name{f@#3}}% % f@#2 undef'ed {\def\f@name{f\arabic{f@psctr}@#3}\stepcounter{f@psctr}}% f@#2 defined \global\@namedef{\f@name}{\postscriptbox{#1}{#2}{#3}}} % % Read the .psz file to define the sizes for each figure. % \@input{\jobname.psz}