From: tvz@zandtwerk.Princeton.EDU (Timothy Van Zandt)
Newsgroups: comp.text.tex
Subject: Typesetting text on a path with PSTricks (experimental).
Date: 12 Nov 92 18:50:53 GMT
Organization: Princeton University
Originator: tvz@zandtwerk.Princeton.EDU


If you are using dvips v5.487 or later (I have only tried it
with 5.491) with PSTricks, you might want to try the appended macros
for typesetting text along an arbitrary path. It is pretty good (but
slow) and somewhat surprising that it is possible at all.

Tim
---
Timothy Van Zandt   (609)258-4050  tvz@Princeton.EDU (NeXTMail)


FILES:
  textpath.tex/textpath.sty  : Input file for generic tex.
  textpath.ps                : header file (obligatory)
  testpath.tex               : A test file.
  testpath.ps                : My PostScript output from the test file.


% textpath.tex/textpath.sty
% Experimental: For use with PSTricks for placing text on a path.
% Requires that \pstheader be defined in pstricks.con.
% Uses the header file textpath.ps.
%
% DRIVER NOTES:
%    * This works with Rokicki's dvips, version 5.487 or later.
%    * This does not work with earlier versions of dvips.
%    * This does not work with TeXview (to preview files with NeXTTeX 3.0,
%        convert file to PostScript and use Preview).
%    * "Does not work" means that it has not effect, for better or for worse.
%    * This may work with other drivers. The requirement is that the driver
%        use "show", unbound and unloaded, to show characters.
%
% 
% USAGE:
%
%    \pstextpath[pos](x,y){PSTricks graphics object}{text}
%                opt  opt          oblig            oblig
%
% Places <text> along path, from beginning to end, defined by
% the PSTricks graphics object. (This object otherwise behaves
% normally. Set linestyle=none if you don't want it to appear.)
%
% <text> can only contain characters. No TeX rules, no \special's.
% Math mode is OK. Entire boxes (e.g., \parbox) are OK too, but
% this is mainly for amusement.
%
% Results are unpredictible if <text> is wider than length of path.
%
% <pos> is either
%                    l   (justify on beginning of path)
%                    c   (center on path)
%                    r   (justify on end of path)
% Default: l
%
% (x,y) is an offset. Characters are shifted distance x along path,
% and are shifted up by y. "Up" means with respect to the path,
% at whatever point the middle of the character occurs. (x,y) must
% be Cartesian coordinates. Both coordinates use \psunit as the
% default.
%
% Default: (0,0).
%
% Setting the y offset to about -.7ex or -1ex leads to good spacing of the
% characters.
% Remember that ex are for the font in effect when \pstextpath occurs,
% not inside the <text> argument.
%
\edef\PSTextpathAt{\the\catcode`\@}
\catcode`\@=11

\special{header=textpath.ps}

% \begin{macro}{\pstextpath}
%    \begin{macrocode}
\def\pstextpath{\@ifnextchar[{\pstextpath@}{\pstextpath@[l]}}
\def\pstextpath@[#1]{\@ifnextchar({\pstextpath@@[#1]}{\pstextpath@@[#1](0,0)}}
\long\def\pstextpath@@[#1](#2,#3)#4#5{%
  \begingroup
    \pst@lookup{#1}\pstextpath@table\pst@tempa
    \pst@checknum\pst@tempa\pst@tempa
    \def\init@pscode{\edef\pst@code{%
      \pst@dict /mtrxc CM def \tx@STV CP translate
      \pst@number\pslinewidth SLW
      \use@color\psk@linecolor newpath}}%
    \def\use@pscode{\pst@Verb{%
      \pst@code\space
      mtrxc setmatrix 0 setgray 
      end}}%
    \def\@multips(##1)(##2)##3##4{\pst@misplaced\multips}%
    \def\nc@object##1##2##3##4{\pst@misplaced{node connection}}%
    \pst@makebox{#5}%
    \pssetlength\pst@dima{#2}%
    \pssetlength\pst@dimb{#3}%
    \setbox\pst@boxa\hbox{%
      {#4}%
      \hbox to\z@{%
        \kern -\wd\pst@boxa
        % BoxWidth = CurrX - Hoffset.
        \pstVerb{tx@TextPathDict begin currentpoint pop /Hoffset exch def end}%
        \kern\pst@dima
        % XOffset = Voffset - Hoffset (extra horizontal skip)
        \pstVerb{tx@TextPathDict begin currentpoint pop /Voffset exch def end}%
        \hss
        \pstVerb{%
          tx@TextPathDict begin \pst@tempa\space InitTextPath end
          /tx@SavedShow /show load def
          /show { tx@TextPathDict begin TextPathShow end } def}}%
      \raise\pst@dimb\box\pst@boxa
      \pstVerb{/show /tx@SavedShow load def}}%
    \wd\pst@boxa=\z@ \dp\pst@boxa=\z@ \ht\pst@boxa=\z@
    \leavevmode\box\pst@boxa
  \endgroup\ignorespaces}
\def\pstextpath@table{,l=0,c=.5,r=1}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\pst@lookup}
%    \begin{macrocode}
\def\pst@lookup#1#2#3{%
  \def\pst@tempa##1,#1=##2,##3\@nil{\def#3{##2}}%
  \expandafter\pst@tempa#2,#1=#1\@nil}
%    \end{macrocode}
% \end{macro}

\catcode`\@=\PSTextpathAt\relax

\endinput
% END textpath.tex


%!
% Header file textpath.ps
% Experiment: For putting text along curve with textpath.tex and PSTricks
% November 12, 1992
/tx@TextPathDict 40 dict def
tx@TextPathDict begin

/SavedShow /show load def

/PathPosition
{ /targetdist exch def
  /pathdist 0 def
  /continue true def
  /X { newx } def /Y { newy } def /Angle 0 def
  gsave
    flattenpath
    {movetoproc}  {linetoproc}
    {curvetoproc} {closepathproc }
    pathforall
  grestore
} def
  
/movetoproc { continue { @movetoproc } { pop pop } ifelse } def

/@movetoproc
{ /newy exch def /newx exch def
  /firstx newx def /firsty newy def
} def
  
/linetoproc { continue { @linetoproc } { pop pop } ifelse } def

/@linetoproc
{ 
  /oldx newx def /oldy newy def
  /newy exch def /newx exch def
  /dx newx oldx sub def
  /dy newy oldy sub def
  /dist dx dup mul dy dup mul add sqrt def
  /pathdist pathdist dist add def
  pathdist targetdist ge
  { pathdist targetdist sub dist div dup
    dy mul neg newy add /Y exch def
    dx mul neg newx add /X exch def
    /Angle dy dx atan def
    /continue false def
  } if
} def
  
/curvetoproc { (ERROR: No curveto's after flattenpath!) print } def
  
/closepathproc { firstx firsty linetoproc } def

/TextPathShow
{ /String exch def
  /CharCount 0 def
  String length
  { String CharCount 1 getinterval ShowChar
    /CharCount CharCount 1 add def
  } repeat
} def

/InitTextPath
{ gsave
    currentpoint
    /Y exch def /X exch def
    10000000 PathPosition
    pathdist X Hoffset sub sub mul
    Voffset Hoffset sub add
    neg X add /Hoffset exch def
    /Voffset Y def
  grestore
} def

/Transform
{ PathPosition
  dup
  Angle cos mul Y add exch
  Angle sin mul neg X add exch
  translate
  Angle rotate
} def

/ShowChar
{ /Char exch def
  gsave
    Char end stringwidth tx@TextPathDict begin
    2 div /Sy exch def 2 div /Sx exch def
    currentpoint
    Voffset sub Sy add exch
    Hoffset sub Sx add
    Transform
    Sx neg Sy neg moveto
    Char end tx@SavedShow tx@TextPathDict begin
  grestore
  Sx 2 mul Sy 2 mul rmoveto
} def

end
% End textpath.ps



% File testpath.tex.
% LaTeX test file for textpath.tex/textpath.sty.
% November 12, 1992
%
% \documentstyle[pstricks,npsfont]{article}
\input textpath.tex

\iffalse    % Comment this out if you have npsfont.sty and want to
            % use PostScript fonts. Comment out also the \fi at the
            % below.

\makeatletter
\input npsfont.sty
%% FONTS
%% See npsfonts.sty for the macros used below.
%% These font definitions require the NFSS.
%%
\newpsfamily[.96]{times}{
  {m}{n}{ptmr},          %Times
  {m}{it}{ptmri},        %
  {m}{sl}{ptmri},        %
  {bx}{n}{ptmb},         %Times-Bold
  {bx}{it}{ptmbi},       %
  {bx}{sl}{ptmbi}}       %
\newpsfamily[.82]{helvetica}{
  {m}{n}{phvr},          %Helvetica
  {m}{it}{phvro},        %Helvetica-Oblique
  {m}{sl}{phvro},        %Helvetica-Oblique
  {bx}{n}{phvb},         %Helvetica-Bold
  {bx}{it}{phvbo},       %Helvetica-BoldOblique
  {bx}{sl}{phvbo}}       %Helvetica-BoldOblique
\newpsfamily[.96]{courier}{
  {m}{n}{pcrr},          %Courier
  {bx}{n}{pcrb},         %Courier-Bold
  {m}{it}{pcrr},         %Courier-Oblique
  {bx}{it}{pcrb}}        %Courier-BoldOblique
\newpsfamily[.965]{symbol}{{m}{n}{rpsyr}}         %Symbol

\renewcommand{\default@family}{times}%
\renewcommand{\rmdefault}{times}%
\renewcommand{\ttdefault}{helvetica}%
\renewcommand{\sfdefault}{helvetica}%
\family\default@family\selectfont
\new@mathversion\mv@tmr
\define@mathgroup\mv@tmr{0}
                 {times}{m}{n}
\define@mathgroup\mv@tmr{1}
                 {times}{m}{it}
\define@mathgroup\mv@tmr{2}
                 {cmsy}{m}{n}
\mathversion{tmr}
\makeatother

\fi     % Comment me out too if using npsfont.sty.

\begin{document}
\null \vfill

\pstextpath{\psarcn(0,0){4}{160}{20}}{All the president's men}
\vfill

\pstextpath{\pscurve(0,0)(4,3)(6,3)(8,-1)}%
  {\Huge  Let's see how $x<y=8^3 \Omega_{ij}^K$ works.
      Here is more text around a path.}
   
\vfill
Here I am checking that there is no interference.
\vfill\vskip 1in
\pstextpath{\psarcn(0,0){4}{160}{20}}{\parbox{2in}{%
  In principle, it is possible to use parbox,
  but we will see what really happens. It seems hard
  to believe that it will work, and even harder to
  believe that someone would want to do this.}}
  
\vfill
\newpage

\null\vfill

\pstextpath[c]{\psarcn(0,0){4}{160}{20}}{All the president's men}

\vfill

\begingroup
  \Huge
  \pstextpath(1cm,-.7ex){\pscurve(0,0)(4,3)(6,3)(8,-1)}%
    {Here is more text around a path. Let's see how
     $x<y=8^3 \Omega_{ij}^K$ works.}
\endgroup

\vfill\vskip 1in

\pstextpath[r]{\psarcn(0,0){4}{160}{20}}{\parbox{2in}{%
  In principle, it is possible to use parbox,
  but we will see what really happens. It seems hard
  to believe that it will work, and even harder to
  believe that someone would want to do this.}}
\vfill

\newpage

\psset{linestyle=none}
\Huge

\pstextpath(1cm,-1ex){\pscurve(0,0)(4,3)(6,3)(8,-1)(13,0)}%
  {Let's see how $x<y=8^3 \Omega_{ij}^K$ works.
    Here is more text around a path.}

\vfill\vskip 1in

\pstextpath(0,-1.3ex){\pscurve(0,0)(4,3)(6,3)(8,-1)(13,0)}%
  {\Huge Let's see how $x<y=8^3 \Omega_{ij}^K$ works.
  Here is more text around a path. }

\vfill\vskip 1in

\pstextpath(0,-.7ex){\pscurve(0,0)(4,3)(6,3)(8,-1)(13,0)}%
  {Let's see how $x<y=8^3 \Omega_{ij}^K$ works.
  Here is more text around a path.}

\end{document}
% End testpath.tex



%!PS-Adobe-2.0
%%Creator: dvips 5.491 Copyright 1986, 1992 Radical Eye Software
%%Title: testpath.dvi
%%Pages: 3 1
%%BoundingBox: 0 0 612 792
%%DocumentFonts: Times-Roman Times-Italic Symbol
%%EndComments
%DVIPSCommandLine: dvips -Pport testpath -o
%%BeginProcSet: tex.pro
%!
/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N /X{S N}
B /TR{translate}N /isls false N /vsize 11 72 mul N /@rigin{isls{[0 -1 1 0 0 0]
concat}if 72 Resolution div 72 VResolution div neg scale isls{Resolution hsize
-72 div mul 0 TR}if Resolution VResolution vsize -72 div 1 add mul TR matrix
currentmatrix dup dup 4 get round 4 exch put dup dup 5 get round 5 exch put
setmatrix}N /@landscape{/isls true N}B /@manualfeed{statusdict /manualfeed
true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N
/IE 0 N /ctr 0 N /df-tail{/nn 8 dict N nn begin /FontType 3 N /FontMatrix
fntrx N /FontBBox FBB N string /base X array /BitMaps X /BuildChar{
CharBuilder}N /Encoding IE N end dup{/foo setfont}2 array copy cvx N load 0 nn
put /ctr 0 N[}B /df{/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0
0 sf neg 0 0]N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data
dup length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{128
ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127
sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data dup type
/stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N /rc 0 N /gp 0 N
/cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup /base get 2 index get
S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff ch-yoff ch-height
sub ch-xoff ch-width add ch-yoff setcachedevice ch-width ch-height true[1 0 0
-1 -.1 ch-xoff sub ch-yoff .1 add]{ch-image}imagemask restore}B /D{/cc X dup
type /stringtype ne{]}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1
ne{dup dup length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}
B /I{cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin
0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul add
.99 lt{/FV}{/RV}ifelse load def pop}N /eop{SI restore showpage userdict
/eop-hook known{eop-hook}if}N /@start{userdict /start-hook known{start-hook}
if /VResolution X /Resolution X 1000 div /DVImag X /IE 256 array N 0 1 255{IE
S 1 string dup 0 3 index put cvn put}for 65781.76 div /vsize X 65781.76 div
/hsize X}N /p{show}N /RMat[1 0 0 -1 0 0]N /BDot 260 string N /rulex 0 N /ruley
0 N /v{/ruley X /rulex X V}B /V{}B /RV statusdict begin /product where{pop
product dup length 7 ge{0 7 getinterval dup(Display)eq exch 0 4 getinterval
(NeXT)eq or}{pop false}ifelse}{false}ifelse end{{gsave TR -.1 -.1 TR 1 1 scale
rulex ruley false RMat{BDot}imagemask grestore}}{{gsave TR -.1 -.1 TR rulex
ruley scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /FV{gsave
transform round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg
rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail{dup
/delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}B /d{-3 M}
B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{4 M}B /w{0
rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{p 1 w}B /r{p 2 w}
B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p a}B /bos{/SS save N}B
/eos{SS restore}B end
%%EndProcSet
%%BeginProcSet: pstricks.pro
%!
% PS prologue for pstricks.tex, v0.92, 92/10/02. Created 1992/10/8.
% For use with Rokicki's dvips.
/tx@Dict 200 dict def tx@Dict begin
/ADict 25 dict def /CM { matrix currentmatrix } def
/SLW { setlinewidth } def /CLW { currentlinewidth} def
/CP { currentpoint } def /ED { exch def } def
/STP { .996264 dup scale } def
/STV { SDict begin normalscale end STP  } def
/Setvmtrx { gsave matrix identmatrix setmatrix STV /vmtrx CM def grestore }
def
/Tr { Setvmtrx vmtrx transform translate } def
/Pyth { dup mul exch dup mul add sqrt } def
/PtoC { 2 copy cos mul 3 1 roll sin mul } def
/Div { dup 0 eq { pop } { div } ifelse } def
/Atan { /atan load stopped { pop pop 0 } if } def
/SD { 0 360 arc closepath fill } def
/SQ { /r ED r r moveto r r neg lineto r neg r neg lineto r neg r lineto
closepath fill } def
/ST { /y ED /x ED x y moveto x neg y lineto 0 x lineto closepath fill } def
/SP { /r ED gsave 0 r moveto 4 { 72 rotate 0 r lineto } repeat closepath fill
grestore } def
/NArray { aload length 2 div dup dup cvi eq not { exch pop } if /n exch cvi
def } def
/Dots { NArray n 1 gt { DotB /n n 2 sub def } { /n n 1 sub def } ifelse n {
@Dot } repeat n 0 ge { DotA } if } def
/Line { NArray n 0 eq not { n 1 eq { 0 0 /n 2 def } if ArrowA /n n 2 sub def n
{ Lineto } repeat CP 4 2 roll ArrowB lineto pop pop } if } def
/Arcto { /a [ 6 -2 roll ] cvx def a r /arcto load stopped { 5 } { 4 } ifelse {
pop } repeat a } def
/CheckClosed { dup n 2 mul 1 sub index eq 2 index n 2 mul 1 add index eq and {
pop pop /n n 1 sub def } if } def
/Polygon { NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop } repeat } {
n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1 ED /x1 ED x1 y1
/x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def n
{ Lineto } repeat x1 y1 x0 y0 6 4 roll Lineto Lineto pop pop closepath }
ifelse } def
/CCA { /y ED /x ED 2 copy y sub /dy1 ED x sub /dx1 ED /l1 dx1 dy1 Pyth def }
def
/CC { /l0 l1 def /x1 x dx sub def /y1 y dy sub def /dx0 dx1 def /dy0 dy1 def
CCA /dx dx0 l1 c exp mul dx1 l0 c exp mul add def /dy dy0 l1 c exp mul dy1 l0
c exp mul add def /m dx0 dy0 Atan dx1 dy1 Atan sub 2 div cos abs b exp a mul
dx dy Pyth Div 2 div def /x2 x l0 dx mul m mul sub def /y2 y l0 dy mul m mul
sub def /dx l1 dx mul m mul neg def /dy l1 dy mul m mul neg def } def
/IC { /c c 1 add def c 0 lt { /c 0 def } { c 3 gt { /c 3 def } if } ifelse /a
a 2 mul 3 div 45 cos b exp div def CCA /dx 0 def /dy 0 def } def
/BOC { IC CC x2 y2 x1 y1 ArrowA CP 4 2 roll x y curveto } def
/NC { CC x1 y1 x2 y2 x y curveto } def
/EOC { x dx sub y dy sub 4 2 roll ArrowB 2 copy curveto } def
/BAC { IC CC x y moveto CC x1 y1 CP ArrowA } def
/NAC { x2 y2 x y curveto CC x1 y1 } def
/EAC { x2 y2 x y ArrowB curveto pop pop } def
/OpenCurve { NArray n 3 lt { n { pop pop } repeat } { BOC /n n 3 sub def n {
NC } repeat EOC } ifelse } def
/AltCurve { NArray n 4 lt { n { pop pop } repeat } { BAC /n n 4 sub def n {
NAC } repeat EAC } ifelse } def
/ClosedCurve { NArray n 3 lt { n { pop pop } repeat } { n 3 gt { CheckClosed }
if 6 copy n 2 mul 6 add 6 roll IC CC x y moveto n { NC } repeat closepath pop
pop } ifelse } def
/PathLength { flattenpath /z 0 def { /y1 ED /x1 ED /y2 y1 def /x2 x1 def } {
/y ED /x ED /z z y y1 sub dup mul x x1 sub dup mul add sqrt add def /y1 y def
/x1 x def } {} { /y y2 def /x x2 def /z z y y1 sub dup mul x x1 sub dup mul
add sqrt add def /y1 y def /x1 x def } pathforall z } def
/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def
PathLength } ifelse /b ED /x ED /y ED /z y x add def b a .5 sub 2 mul y mul
sub z Div round z mul a .5 sub 2 mul y mul add b exch Div dup /y exch y mul
def /x exch x mul def y x 2 array astore 1 a sub y mul setdash stroke } def
/DotLine { /b PathLength def /a ED /x ED /y CLW def /z y x add def a 0 gt { /b
b a div def } { a 0 eq { /b b y sub def } { a -3 eq { /b b y add def } if }
ifelse } ifelse /c b z Div round def b c z mul sub c Div x add y add 0 exch 2
array astore a 0 gt { 0 } { y 2 div a -2 gt { neg } if } ifelse setdash 1
setlinecap stroke } def
/LineFill { gsave clip /a ED pathbbox exch /x2 ED a Div ceiling exch a Div
floor dup a mul 0 exch translate sub 1 add cvi /y ED /x1 ED newpath 2
setlinecap y {x1 0 moveto x2 0 lineto stroke 0 a translate} repeat grestore }
def
/BeginArrow { ADict begin /y1 ED /x1 ED /y2 ED /x2 ED /dy y2 y1 sub def /dx x2
x1 sub def /mtrxa CM def gsave x1 y1 translate /angle dx neg dy Atan def angle
rotate newpath } def
/EndArrow { mtrxa setmatrix x2 y2 currentpoint grestore end } def
/Arrow { CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED w neg h moveto 0
0 lineto w h lineto w neg a neg rlineto gsave fill grestore } def
/Tbar { CLW mul add 2 div /z ED pop z neg CLW 2 div moveto z 2 mul 0 rlineto
stroke 0 CLW moveto } def
/Bracket { CLW mul add dup CLW sub 2 div /z ED mul /a ED z neg a moveto z neg
CLW 2 div lineto z CLW 2 div lineto z a lineto stroke 0 CLW moveto } def
/RoundBracket { CLW mul add dup 2 div CLW 8 div sub /z ED mul CLW 2 div sub /a
ED a z lt { z dup mul a dup mul add a 2 mul Div dup a sub z exch Atan /a ED /z
ED } { /a 90 def } ifelse 0 z CLW 2 div add z 270 a sub 270 a add arc stroke 0
CLW moveto } def
/EndDot { { /z DS def } { /z 0 def } ifelse /b ED 0 z DS SD b { 0 z DS CLW sub
SD } if 0 DS z add CLW 4 div sub moveto } def
/Frame { /a .5 CLW mul def 3 -1 roll 2 copy gt { exch } if a sub /y2 ED a add
/y1 ED 2 copy gt { exch } if a sub /x2 ED a add /x1 ED x1 x2 eq y1 y2 eq or {
pop pop x1 y1 moveto x2 y2 lineto } { /b y1 y2 sub abs x1 x2 sub abs 2 copy gt
{exch pop} {pop} ifelse 2 div a sub def { b mul /b ED } { dup b lt { /b ED } {
pop } ifelse } ifelse x1 y1 y2 add 2 div moveto x1 y2 x1 x2 add 2 div y2 b
arcto 4 {pop} repeat x2 y2 x2 y1 y2 add 2 div b arcto 4 {pop} repeat x2 y1 x1
x2 add 2 div y1 b arcto 4 {pop} repeat x1 y1 x1 y1 y2 add 2 div b arcto 4
{pop} repeat closepath } ifelse } def
/Parab { /y0 exch def /x0 exch def /y1 exch def /x1 exch def /dx x0 x1 sub 3
div def /dy y0 y1 sub 3 div def x0 dx sub y0 dy add x1 y1 ArrowA x0 dx add y0
dy add x0 2 mul x1 sub y1 ArrowB curveto /Points [ x1 y1 x0 y0 x0 2 mul x1 sub
y1 ] def } def
/Grid { /a { (    ) } def /b ED /d ED /n ED cvi dup 1 lt { pop 1 } if /c ED c
div dup 0 eq { pop 1 } if /cy ED c div dup 0 eq { pop 1 } if /cx ED cy div cvi
/y ED cx div cvi /x ED cy div cvi /y2 ED cx div cvi /x2 ED cy div cvi /y1 ED
cx div cvi /x1 ED /h y2 y1 sub 0 gt { 1 } { -1 } ifelse def /w x2 x1 sub 0 gt
{ 1 } { -1 } ifelse def b 0 gt { /z1 b 4 div CLW 2 div add def /Helvetica
findfont b scalefont setfont /b b .95 mul CLW 2 div add def } if gsave n 0 gt
{ 1 setlinecap [ 0 cy n div ] 0 setdash } { 2 setlinecap } ifelse /c x1 def /i
500 w mul x1 add def /e y cy mul def /f y1 cy mul def /g y2 cy mul def x1 cx
mul 0 translate { newpath 0 e moveto b 0 gt { gsave d c a cvs dup stringwidth
pop /z2 ED w 0 gt {z1} {z1 z2 add neg} ifelse h 0 gt {b neg} {z1} ifelse
rmoveto show grestore } if 0 f moveto 0 g lineto stroke cx w mul 0 translate c
x2 eq c i eq or {exit} if /c c w add def } loop grestore gsave n 0 gt { 1
setlinecap [ 0 cx n div ] 0 setdash } { 2 setlinecap } ifelse /c y1 def /i 500
h mul y1 add def /e x cx mul def /f x1 cx mul def /g x2 cx mul def 0 y1 cy mul
translate { newpath e 0 moveto b 0 gt { gsave d c a cvs dup stringwidth pop
/z2 ED w 0 gt {z1 z2 add neg} {z1} ifelse h 0 gt {z1} {b neg} ifelse rmoveto
show grestore } if f 0 moveto g 0 lineto stroke 0 cy h mul translate c y2 eq c
i eq or {exit} if /c c h add def } loop grestore } def
/ArcArrow { /d ED /@b ED /a ED /TDict 2 dict def TDict begin /stroke { } def
/fill { } def gsave 0 1 0 0 @b grestore end c mul /e ED pop pop pop /f CLW 8
div c mul neg def r a e d PtoC r a PtoC @b pop pop pop pop a e d f d } def
/ArcPoints { /Points [ r 3 index PtoC 0 0 r 8 index PtoC ] def } def
/Ellipse { /b ED /a ED /y ED /x ED /y0 ED /x0 ED x0 y0 translate /mtrx CM def
x y scale 0 0 1 a b arc mtrx setmatrix /Points [ 0 0 ] def } def
/ScalePoints { /y ED /x ED counttomark dup dup cvi eq not { exch pop } if /m
exch def /n m 2 div cvi def n { y mul m 1 roll x mul m 1 roll } repeat } def
/Scale { CP CP translate 4 2 roll scale neg exch neg exch translate } def
/Rot { CP CP translate 3 -1 roll neg rotate neg exch neg exch translate } def
/ClipBox { /mtrx CM def STV /a ED /b ED /c ED 0 c neg rmoveto a 0 rlineto 0 b
c add rlineto a neg 0 rlineto closepath clip newpath mtrx setmatrix } def
/GetCoor { nodeA begin x y mtrxf transform CM itransform end nodeB begin x y
mtrxf transform CM itransform end } def
/GetAngle { GetCoor 3 -1 roll sub 3 1 roll sub neg Atan  } def
/GetDPos { angle 1 0 mtrxf dtransform CM idtransform exch atan sub dup sin
/@sin ED cos /@cos ED getpos y add exch x add exch mtrxf transform CM
itransform offset angle cos mul add exch offset angle sin mul sub exch } def
/GetPos { nodeA begin /angle angleA def /offset offsetA def /nodesep nodesepA
def GetDPos end /y1 ED /x1 ED nodeB begin /angle angleB def /offset offsetB
def /nodesep nodesepB def GetDPos end /y2 ED /x2 ED } def
/GetDist { x1 x2 sub y1 y2 sub Pyth  } def
/InitNode { gsave STV CP translate dict def load begin /mtrxf CM def } def
/InitPnode { /y ED /x ED /getpos { nodesep @cos mul nodesep @sin mul } def }
def
/InitCnode { /y ED /x ED /getpos { nodesep r add dup @cos mul exch @sin mul }
def } def
/GetRnodePos { @cos 0 gt { /dx r nodesep add def } { /dx l nodesep sub def }
ifelse @sin 0 gt { /dy u nodesep add def } { /dy d nodesep sub def } ifelse dx
@sin mul abs dy @cos mul abs gt { dy @cos mul @sin div dy } { dx dup @sin mul
@cos Div } ifelse } def
/InitRnode { /r ED r mul neg /l ED /r r l add def /x l neg def { neg /d ED /u
ED /y 0 def } { neg /y ED y sub /u ED u mul neg /d ED /u u d add def /y y d
sub def } ifelse /getpos { GetRnodePos } def } def
/GetOnodePos { /ww w nodesep add def /hh h nodesep add def @sin ww mul @cos hh
mul Atan dup cos ww mul exch sin hh mul } def
/InitNC { tx@Dict nodeA known tx@Dict nodeB known and dup { /nodeA nodeA load
def /nodeB nodeB load def } if } def
/LineMP { 4 copy 1 t sub mul exch t mul add 3 1 roll 1 t sub mul exch t mul
add exch 6 2 roll sub 3 1 roll sub Atan  } def
/NCLine { GetAngle /angleA ED /angleB angleA 180 add def GetPos x1 y1 x2 y2
ArrowB 4 2 roll ArrowA lineto /lvar [ x2 x1 y2 y1 ] cvx def /lpos { lvar
LineMP } def } def
/BezierMidpoint { /y3 ED /x3 ED /y2 ED /x2 ED /y1 ED /x1 ED /y0 ED /x0 ED /t
ED /cx x1 x0 sub 3 mul def /cy y1 y0 sub 3 mul def /bx x2 x1 sub 3 mul cx sub
def /by y2 y1 sub 3 mul cy sub def /ax x3 x0 sub cx sub bx sub def /ay y3 y0
sub cy sub by sub def ax t 3 exp mul bx t t mul mul add cx t mul add x0 add ay
t 3 exp mul by t t mul mul add cy t mul add y0 add 3 ay t t mul mul mul 2 by t
mul mul add cy add 3 ax t t mul mul mul 2 bx t mul mul add cx add atan } def
/GetArms { /x1a armA angleA cos mul x1 add def /y1a armA angleA sin mul y1 add
def /x2a armB angleB cos mul x2 add def /y2a armB angleB sin mul y2 add def }
def
/NCCurve { GetPos GetDist 2 div dup 3 -1 roll mul /armA ED mul /armB ED
GetArms x1a y1a x1 y1 ArrowA x2a y2a x2 y2 ArrowB curveto /lvar [ x1 y1 x1a
y1a x2a y2a x2 y2 ] cvx def /lpos { t lvar BezierMidpoint } def } def
/AnglesMP { lvar t 3 gt { /t t 3 sub def } { t 2 gt { /t t 2 sub def 10 -2
roll } { t 1 gt { /t t 1 sub def 10 -4 roll } { 10 4 roll } ifelse } ifelse }
ifelse 6 { pop } repeat 3 -1 roll exch LineMP  } def
/NCAngles { GetPos GetArms /mtrx angleA matrix rotate def x1a y1a mtrx
transform pop x2a y2a mtrx transform exch pop mtrx itransform /y0 ED /x0 ED [
armB 0 ne { x2 y2 } if x2a y2a x0 y0 x1a y1a armA 0 ne { x1 y1 } if ] Line
/lvar [ x2 y2 x2a y2a x0 y0 x1a y1a x1 y1 ] cvx def /lpos { AnglesMP } def }
def
/NCAngle { GetPos /x2a armB angleB cos mul x2 add def /y2a armB angleB sin mul
y2 add def /mtrx angleA matrix rotate def x2a y2a mtrx transform pop x1 y1
mtrx transform exch pop mtrx itransform /y0 ED /x0 ED [ armB 0 ne { x2 y2 } if
x2a y2a x0 y0 x1 y1 ] Line /lvar [ x2 y2 x2 y2 x2a y2a x0 y0 x1 y1 ] cvx def
/lpos { AnglesMP } def } def
/NCBar { GetPos GetArms /mtrx angleA matrix rotate def x1a y1a mtrx transform
pop x2a y2a mtrx transform pop sub dup 0 mtrx itransform 3 -1 roll 0 gt { /y2a
exch y2a add def /x2a exch x2a add def } { /y1a exch neg y1a add def /x2a exch
neg x2a add def } ifelse [ x2 y2 x2a y2a x1a y1a x1 y1 ] Line /lvar [ x2 y2 x2
y2 x2a y2a x1a y1a x1 y1 ] cvx def /lpos { lvar AnglesMP } def } def
/NCDiag { GetPos GetArms [ x2 y2 x2a y2a x1a y1a x1 y1] Line /lvar [ x2 y2 x2
y2 x2a y2a x1a y1a x1 y1] cvx def /lpos { AnglesMP } def } def
/NCDiagg { nodeA begin /angle angleA def /offset offsetA def /nodesep nodesepA
def GetDPos end /y1 ED /x1 ED /x1a armA angleA cos mul x1 add def /y1a armA
angleA sin mul y1 add def nodeB begin x y mtrxf transform CM itransform end
y1a sub exch x1a sub Atan 180 add /angleB ED nodeB begin /angle angleB def
/offset offsetB def /nodesep nodesepB def GetDPos end /y2 ED /x2 ED [ x2 y2
x1a y1a x1 y1] Line /lvar [ x2 y2 x2 y2 x2 y2 x1a y1a x1 y1] cvx def /lpos {
AnglesMP } def } def
/LPut { tx@Dict /lpos known { Setvmtrx lpos /langle ED vmtrx transform } {
/langle 0 def CP } ifelse } def
/BeginOL { dup (all) eq exch TheOL eq or { IfVisible not { CP OLUnit translate
moveto /IfVisible true def } if } { IfVisible { CP OLUnit neg exch neg exch
translate moveto /IfVisible false def } if } ifelse } def
/InitOL { Setvmtrx /OLUnit [ 2890.79999 dup vmtrx dtransform ] cvx def /BOL {
BeginOL } def /IfVisible true def } def
end
%%EndProcSet
%%BeginProcSet: textpath.ps
%!
% Header file textpath.ps
% Experiment: For putting text along curve with textpath.tex and PSTricks
% November 12, 1992
/tx@TextPathDict 40 dict def
tx@TextPathDict begin

/SavedShow /show load def

/PathPosition
{ /targetdist exch def
  /pathdist 0 def
  /continue true def
  /X { newx } def /Y { newy } def /Angle 0 def
  gsave
    flattenpath
    {movetoproc}  {linetoproc}
    {curvetoproc} {closepathproc }
    pathforall
  grestore
} def
  
/movetoproc { continue { @movetoproc } { pop pop } ifelse } def

/@movetoproc
{ /newy exch def /newx exch def
  /firstx newx def /firsty newy def
} def
  
/linetoproc { continue { @linetoproc } { pop pop } ifelse } def

/@linetoproc
{ 
  /oldx newx def /oldy newy def
  /newy exch def /newx exch def
  /dx newx oldx sub def
  /dy newy oldy sub def
  /dist dx dup mul dy dup mul add sqrt def
  /pathdist pathdist dist add def
  pathdist targetdist ge
  { pathdist targetdist sub dist div dup
    dy mul neg newy add /Y exch def
    dx mul neg newx add /X exch def
    /Angle dy dx atan def
    /continue false def
  } if
} def
  
/curvetoproc { (ERROR: No curveto's after flattenpath!) print } def
  
/closepathproc { firstx firsty linetoproc } def

/TextPathShow
{ /String exch def
  /CharCount 0 def
  String length
  { String CharCount 1 getinterval ShowChar
    /CharCount CharCount 1 add def
  } repeat
} def

/InitTextPath
{ gsave
    currentpoint
    /Y exch def /X exch def
    10000000 PathPosition
    pathdist X Hoffset sub sub mul
    Voffset Hoffset sub add
    neg X add /Hoffset exch def
    /Voffset Y def
  grestore
} def

/Transform
{ PathPosition
  dup
  Angle cos mul Y add exch
  Angle sin mul neg X add exch
  translate
  Angle rotate
} def

/ShowChar
{ /Char exch def
  gsave
    Char end stringwidth tx@TextPathDict begin
    2 div /Sy exch def 2 div /Sx exch def
    currentpoint
    Voffset sub Sy add exch
    Hoffset sub Sx add
    Transform
    Sx neg Sy neg moveto
    Char end tx@SavedShow tx@TextPathDict begin
  grestore
  Sx 2 mul Sy 2 mul rmoveto
} def

end
% End textpath.ps
%%EndProcSet
%%BeginProcSet: texps.pro
%!
TeXDict begin /rf{findfont dup length 1 add dict begin{1 index /FID ne 2 index
/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5
-1 roll VResolution Resolution div mul neg 0 0]/Metrics exch def dict begin
Encoding{exch dup type /integertype ne{pop pop 1 sub dup 0 le{pop}{[}ifelse}{
FontMatrix 0 get div Metrics 0 get div def}ifelse}forall Metrics /Metrics
currentdict end def[2 index currentdict end definefont 3 -1 roll makefont
/setfont load]cvx def}def /ObliqueSlant{dup sin S cos div neg}B /SlantFont{4
index mul add}def /ExtendFont{3 -1 roll mul exch}def /ReEncodeFont{/Encoding
exch def}def end
%%EndProcSet
%%BeginProcSet: special.pro
%!
TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N /vs
792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP 0 N /rwiSeen false N
/rhiSeen false N /letter{}N /note{}N /a4{}N /legal{}N}B /@scaleunit 100 N
/@hscale{@scaleunit div /hsc X}B /@vscale{@scaleunit div /vsc X}B /@hsize{/hs
X /CLIP 1 N}B /@vsize{/vs X /CLIP 1 N}B /@clip{/CLIP 2 N}B /@hoffset{/ho X}B
/@voffset{/vo X}B /@angle{/ang X}B /@rwi{10 div /rwi X /rwiSeen true N}B /@rhi
{10 div /rhi X /rhiSeen true N}B /@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B
/@ury{/ury X}B /magscale true def end /@MacSetUp{userdict /md known{userdict
/md get type /dicttype eq{userdict begin md length 10 add md maxlength ge{/md
md dup length 20 add dict copy def}if end md begin /letter{}N /note{}N /legal{
}N /od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath clippath
mark{transform{itransform moveto}}{transform{itransform lineto}}{6 -2 roll
transform 6 -2 roll transform 6 -2 roll transform{itransform 6 2 roll
itransform 6 2 roll itransform 6 2 roll curveto}}{{closepath}}pathforall
newpath counttomark array astore /gc xdf pop ct 39 0 put 10 fz 0 fs 2
F/|______Courier fnt invertflag{PaintBlack}if}N /txpose{pxs pys scale ppr
aload pop por{noflips{pop S neg S TR pop 1 -1 scale}if xflip yflip and{pop S
neg S TR 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0
get neg sub neg TR}if xflip yflip not and{pop S neg S TR pop 180 rotate ppr 3
get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get
neg TR}if}{noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop
pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get
neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get
neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr 0
get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3
1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N /cp{pop pop
showpage pm restore}N end}if}if}N /normalscale{Resolution 72 div VResolution
72 div neg scale magscale{DVImag dup scale}if 0 setgray}N /psfts{S 65781.76
div N}N /startTexFig{/psf$SavedState save N userdict maxlength dict begin
/magscale false def normalscale currentpoint TR /psf$ury psfts /psf$urx psfts
/psf$lly psfts /psf$llx psfts /psf$y psfts /psf$x psfts currentpoint /psf$cy X
/psf$cx X /psf$sx psf$x psf$urx psf$llx sub div N /psf$sy psf$y psf$ury
psf$lly sub div N psf$sx psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy
psf$sy div psf$ury sub TR /showpage{}N /erasepage{}N /copypage{}N /p 3 def
@MacSetUp}N /doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll
newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto closepath
clip newpath moveto}N /endTexFig{end psf$SavedState restore}N /@beginspecial{
SDict begin /SpecialSave save N gsave normalscale currentpoint TR
@SpecialDefaults count /ocount X /dcount countdictstack N}N /@setspecial{CLIP
1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath
clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx sub div rhiSeen{
rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR}{rhiSeen{rhi ury lly
sub div dup scale llx neg lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly
moveto urx lly lineto urx ury lineto llx ury lineto closepath clip}if
/showpage{}N /erasepage{}N /copypage{}N newpath}N /@endspecial{count ocount
sub{pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave
restore end}N /@defspecial{SDict begin}N /@fedspecial{end}B /li{lineto}B /rl{
rlineto}B /rc{rcurveto}B /np{/SaveX currentpoint /SaveY X N 1 setlinecap
newpath}N /st{stroke SaveX SaveY moveto}N /fil{fill SaveX SaveY moveto}N
/ellipse{/endangle X /startangle X /yrad X /xrad X /savematrix matrix
currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc savematrix
setmatrix}N end
%%EndProcSet
TeXDict begin 40258431 52099146 1000 300 300 @start /Fa 149[23
23 29[55 75[{}3 82.960571 /Times-Italic rf /Fb 204[41 51[{}1
82.960571 /Times-Roman rf /Fc 134[44 44 59[67 60[{}3 99.520683
/Times-Italic rf /Fd 168[76 87[{}1 99.520683 /Symbol rf /Fe
135[50 72 1[50 28 39 33 1[50 50 50 77 1[50 1[28 50 2[44 50
2[44 20[61 3[72 10[56 4[50 9[25 6[33 39[{}22 99.520683 /Times-Roman
rf /Ff 134[20 20 29 20 20 11 16 13 1[20 20 20 31 11 20 1[11
20 20 13 18 20 18 20 18 23[13 29 6[29 13[20 20 20 2[10 13 10
4[13 39[{}33 40.000278 /Times-Roman rf end
%%EndProlog
%%BeginSetup
%%Feature: *Resolution 300dpi
TeXDict begin

%%EndSetup
%%Page: 1 1
0 bop 324 686 a
 tx@Dict begin  tx@Dict begin /mtrxc CM def STV CP translate 0.8 SLW
0. setgray newpath /ArrowA { moveto } def /ArrowB { } def 0.0 0.0 translate
/r 113.81097 def /c 57.2957 r Div def /angleA 160.  0.0 c mul 2 div
sub def /angleB 20.  0.0 c mul 2 div add def 0 0 r angleA angleB arcn
gsave 0.8 SLW 0. setgray 0 setlinecap stroke grestore mtrxc setmatrix
0 setgray end end
 -47 686 a
 tx@TextPathDict begin currentpoint pop /Hoffset exch def end
 -47 686 a
 tx@TextPathDict begin currentpoint pop /Voffset exch def end
 324 686 a
 tx@TextPathDict begin 0. InitTextPath end /tx@SavedShow /show load
def /show { tx@TextPathDict begin TextPathShow end } def
 Ff(All)10 b(the)f(president')n
(s)g(men)695 686 y
 /show /tx@SavedShow load def
 324 1064 a
 tx@Dict begin  tx@Dict begin /mtrxc CM def STV CP translate 0.8 SLW
0. setgray newpath /ArrowA { moveto } def /ArrowB { } def [ 227.62195
-28.45274 170.71646 85.35823 113.81097 85.35823 0.0 0.0 ] 1. 0.1 0.
 /c ED /b ED /a ED OpenCurve  gsave 0.8 SLW 0. setgray 0 setlinecap
stroke grestore mtrxc setmatrix 0 setgray end end
 -2404 1064 a
 tx@TextPathDict begin currentpoint pop /Hoffset exch def end
 -2404 1064 a
 tx@TextPathDict begin currentpoint pop /Voffset exch def end
 324
1064 a
 tx@TextPathDict begin 0. InitTextPath end /tx@SavedShow /show load
def /show { tx@TextPathDict begin TextPathShow end } def
 Fe(Let')-5 b(s)23 b(see)h(how)g Fc(x)29 b(<)f(y)h Fe(=)f(8)1269
1026 y Fb(3)1312 1064 y Fd(W)1388 1026 y Fa(K)1388 1089 y(ij)1473
1064 y Fe(works.)34 b(Here)25 b(is)f(more)g(text)g(around)f(a)i(path.)3051
1064 y
 /show /tx@SavedShow load def
 324 1442 a Ff(Here)9 b(I)h(am)g(checking)f(that)h(there)f(is)h(no)g
(interference.)324 2121 y
 tx@Dict begin  tx@Dict begin /mtrxc CM def STV CP translate 0.8 SLW
0. setgray newpath /ArrowA { moveto } def /ArrowB { } def 0.0 0.0 translate
/r 113.81097 def /c 57.2957 r Div def /angleA 160.  0.0 c mul 2 div
sub def /angleB 20.  0.0 c mul 2 div add def 0 0 r angleA angleB arcn
gsave 0.8 SLW 0. setgray 0 setlinecap stroke grestore mtrxc setmatrix
0 setgray end end
 -276 2121 a
 tx@TextPathDict begin currentpoint pop /Hoffset exch def end
 -276 2121 a
 tx@TextPathDict begin currentpoint pop /Voffset exch def end
 324 2121
a
 tx@TextPathDict begin 0. InitTextPath end /tx@SavedShow /show load
def /show { tx@TextPathDict begin TextPathShow end } def
 -97 x Ff(In)j(principle,)f(it)h(is)f(possible)f(to)i(use)e(par)o(-)324
2074 y(box,)g(but)h(we)f(will)g(see)g(what)g(really)g(hap-)324
2123 y(pens.)21 b(It)12 b(seems)f(hard)h(to)h(believe)e(that)i(it)324
2173 y(will)e(work,)g(and)f(even)g(harder)h(to)g(believe)324
2223 y(that)f(someone)e(would)i(want)f(to)h(do)g(this.)924
2121 y
 /show /tx@SavedShow load def
 968 2574 a Ff(1)p eop
%%Page: 2 2
1 bop 324 780 a
 tx@Dict begin  tx@Dict begin /mtrxc CM def STV CP translate 0.8 SLW
0. setgray newpath /ArrowA { moveto } def /ArrowB { } def 0.0 0.0 translate
/r 113.81097 def /c 57.2957 r Div def /angleA 160.  0.0 c mul 2 div
sub def /angleB 20.  0.0 c mul 2 div add def 0 0 r angleA angleB arcn
gsave 0.8 SLW 0. setgray 0 setlinecap stroke grestore mtrxc setmatrix
0 setgray end end
 -47 780 a
 tx@TextPathDict begin currentpoint pop /Hoffset exch def end
 -47 780 a
 tx@TextPathDict begin currentpoint pop /Voffset exch def end
 324 780 a
 tx@TextPathDict begin 0.5 InitTextPath end /tx@SavedShow /show load
def /show { tx@TextPathDict begin TextPathShow end } def
 Ff(All)10 b(the)f(president')n
(s)g(men)695 780 y
 /show /tx@SavedShow load def
 324 1253 a
 tx@Dict begin  tx@Dict begin /mtrxc CM def STV CP translate 0.8 SLW
0. setgray newpath /ArrowA { moveto } def /ArrowB { } def [ 227.62195
-28.45274 170.71646 85.35823 113.81097 85.35823 0.0 0.0 ] 1. 0.1 0.
 /c ED /b ED /a ED OpenCurve  gsave 0.8 SLW 0. setgray 0 setlinecap
stroke grestore mtrxc setmatrix 0 setgray end end
 -2404 1253 a
 tx@TextPathDict begin currentpoint pop /Hoffset exch def end
 -2286 1253 a
 tx@TextPathDict begin currentpoint pop /Voffset exch def end
 324
1253 a
 tx@TextPathDict begin 0. InitTextPath end /tx@SavedShow /show load
def /show { tx@TextPathDict begin TextPathShow end } def
 31 x Fe(Here)24 b(is)g(more)h(text)e(around)g(a)i(path.)34
b(Let')-5 b(s)24 b(see)g(how)f Fc(x)29 b(<)g(y)f Fe(=)h(8)2580
1247 y Fb(3)2623 1284 y Fd(W)2699 1247 y Fa(K)2699 1310 y(ij)2784
1284 y Fe(works.)3051 1253 y
 /show /tx@SavedShow load def
 324 2026 a
 tx@Dict begin  tx@Dict begin /mtrxc CM def STV CP translate 0.8 SLW
0. setgray newpath /ArrowA { moveto } def /ArrowB { } def 0.0 0.0 translate
/r 113.81097 def /c 57.2957 r Div def /angleA 160.  0.0 c mul 2 div
sub def /angleB 20.  0.0 c mul 2 div add def 0 0 r angleA angleB arcn
gsave 0.8 SLW 0. setgray 0 setlinecap stroke grestore mtrxc setmatrix
0 setgray end end
 -276 2026 a
 tx@TextPathDict begin currentpoint pop /Hoffset exch def end
 -276 2026
a
 tx@TextPathDict begin currentpoint pop /Voffset exch def end
 324 2026 a
 tx@TextPathDict begin 1. InitTextPath end /tx@SavedShow /show load
def /show { tx@TextPathDict begin TextPathShow end } def
 -97 x Ff(In)13 b(principle,)f(it)h(is)f(possible)f(to)i(use)e
(par)o(-)324 1979 y(box,)g(but)h(we)f(will)g(see)g(what)g(really)g(hap-)324
2029 y(pens.)21 b(It)12 b(seems)f(hard)h(to)h(believe)e(that)i(it)324
2079 y(will)e(work,)g(and)f(even)g(harder)h(to)g(believe)324
2128 y(that)f(someone)e(would)i(want)f(to)h(do)g(this.)924
2026 y
 /show /tx@SavedShow load def
 968 2574 a Ff(2)p eop
%%Page: 3 3
2 bop 324 307 a
 tx@Dict begin  tx@Dict begin /mtrxc CM def STV CP translate 0.8 SLW
0. setgray newpath /ArrowA { moveto } def /ArrowB { } def [ 369.88567
0.0 227.62195 -28.45274 170.71646 85.35823 113.81097 85.35823 0.0 0.0
] 1. 0.1 0.  /c ED /b ED /a ED OpenCurve  mtrxc setmatrix 0 setgray
end end
 -2404 307 a
 tx@TextPathDict begin currentpoint pop /Hoffset exch def end
 -2286 307 a
 tx@TextPathDict begin currentpoint pop /Voffset exch def end
 324 307 a
 tx@TextPathDict begin 0. InitTextPath end /tx@SavedShow /show load
def /show { tx@TextPathDict begin TextPathShow end } def
 45 x Fe(Let')-5
b(s)23 b(see)h(how)g Fc(x)29 b(<)f(y)h Fe(=)f(8)1269 314 y
Fb(3)1312 352 y Fd(W)1388 314 y Fa(K)1388 377 y(ij)1473 352
y Fe(works.)34 b(Here)25 b(is)f(more)g(text)g(around)f(a)i(path.)3051
307 y
 /show /tx@SavedShow load def
 324 1378 a
 tx@Dict begin  tx@Dict begin /mtrxc CM def STV CP translate 0.8 SLW
0. setgray newpath /ArrowA { moveto } def /ArrowB { } def [ 369.88567
0.0 227.62195 -28.45274 170.71646 85.35823 113.81097 85.35823 0.0 0.0
] 1. 0.1 0.  /c ED /b ED /a ED OpenCurve  mtrxc setmatrix 0 setgray
end end
 -2439 1378 a
 tx@TextPathDict begin currentpoint pop /Hoffset exch def end
 -2439 1378 a
 tx@TextPathDict begin currentpoint pop /Voffset exch def end
 324 1378 a
 tx@TextPathDict begin 0. InitTextPath end /tx@SavedShow /show load
def /show { tx@TextPathDict begin TextPathShow end } def
 58 x
Fe(Let')-5 b(s)23 b(see)h(how)g Fc(x)29 b(<)f(y)h Fe(=)f(8)1269
1398 y Fb(3)1312 1436 y Fd(W)1388 1398 y Fa(K)1388 1461 y(ij)1473
1436 y Fe(works.)34 b(Here)25 b(is)f(more)g(text)g(around)f(a)i(path.)3087
1378 y
 /show /tx@SavedShow load def
 324 2449 a
 tx@Dict begin  tx@Dict begin /mtrxc CM def STV CP translate 0.8 SLW
0. setgray newpath /ArrowA { moveto } def /ArrowB { } def [ 369.88567
0.0 227.62195 -28.45274 170.71646 85.35823 113.81097 85.35823 0.0 0.0
] 1. 0.1 0.  /c ED /b ED /a ED OpenCurve  mtrxc setmatrix 0 setgray
end end
 -2404 2449 a
 tx@TextPathDict begin currentpoint pop /Hoffset exch def end
 -2404 2449 a
 tx@TextPathDict begin currentpoint pop /Voffset exch def end
 324 2449 a
 tx@TextPathDict begin 0. InitTextPath end /tx@SavedShow /show load
def /show { tx@TextPathDict begin TextPathShow end } def
 31 x
Fe(Let')-5 b(s)23 b(see)h(how)g Fc(x)29 b(<)f(y)h Fe(=)f(8)1269
2443 y Fb(3)1312 2480 y Fd(W)1388 2443 y Fa(K)1388 2506 y(ij)1473
2480 y Fe(works.)34 b(Here)25 b(is)f(more)g(text)g(around)f(a)i(path.)3051
2449 y
 /show /tx@SavedShow load def
 968 2574 a Ff(3)p eop
%%Trailer
end
userdict /end-hook known{end-hook}if
%%EOF



-- 
Timothy Van Zandt   (609)258-4050  tvz@Princeton.EDU (NeXTMail)
Newsgroups: comp.text.tex