[comp.text.tex] PostScript manipulations on alternate pages with dvips

S.P.Q.Rahtz@ecs.soton.ac.uk (Sebastian Rahtz) (09/20/90)

A speculative request from Peter Abbott for a method of putting every
other page in his output upside down (this was going to a
phototypesetter, and it helps the plate maker in some way), prompted
me to poke at the facility recently added to dvips by Tom Rokicki,
which allows one to specify a procedure which will be applied to every
page, simply by defining `bop-hook'. It was delightfully easy, and I
offer this short example; put it in `foo.pro' and call dvips with
`-h foo.pro' and away you go:

    /Inch {72 mul} def
    /PageNo { 0 } def
    /bop-hook { 
    /PageNo PageNo 1 add  def     %% increment page counter
    PageNo 2 mod 0 gt             %% see if its an even page
    { }                           %% do nothing
    {                             %% otherwise
    8.5 Inch 11.65 Inch translate %% go to top right (this is A4 paper)
    180 rotate                    %% turn round and face other way
    }
    ifelse
     } def

Clearly the test for odd/even page could be extended, and the method
used to perform all sorts of use{less,ful} tricks.

It is also very easy to put  DRAFT on each page....

/DRAFTSTRING { (DRAFT) } def
/bop-hook { gsave
        initmatrix
       /Helvetica-Bold findfont setfont
% make size depend on length of string
       DRAFTSTRING dup stringwidth pop 8.875 exch div dup 72 mul dup
       scale
% placement is on A4
       52.3 rotate 2.5 exch div -.35 translate
       0.95 setgray
       0 0 moveto show
       grestore } def

I hope other dvi to PS drivers add this useful facility

sebastian