1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
%
% 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{% <width> <height> <file>
\@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@<filename>' is defined:
% If not, this is the first time PS file <filename> has been used,
% so we def \f@name = f@<filename>, and define the tag t@<filename>.
% Otherwise, this filename has been used before, and we will add
% a unique number to the name to disambiguate:
% we def \f@name = fN@<filename> 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}
|