%%
%%  pageframe.sty for LaTeX 2e by Mark Reed
%%
%%  Generated from pageframe.sty by Cameron Smith
%%  18 Sept 1990, 16 Oct 1990, 21 Nov 1990, 14 Nov 1991
%%  v0.1 -- First release. 18.4.97, M. Reed
%%  v0.2 -- Added \killcropmarks and \nextpagestyle. Updated output
%%          routine for use with LaTeX 2e <1997/12/01>. 23.4.98, M. Reed
%%
%%  By default, draws a frame around the text area to represent
%%  the edge of the paper -- useful when pages for a book of size
%%  7x9 inches (for example) is being proofed on 8 1/2 x 11 inch
%%  paper.  If \pageframefalse is executed, the part of the frame
%%  beside the text is removed, leaving only the corner marks
%%  to use for checking registration and for cropping.
%%  The full frame can be restored by executing \pageframetrue.
%%
%%  This shows the results of
%%
%%       \pageframetrue  and   \pageframefalse
%%
%%        _|__________|_       _|          |_
%%         |          |
%%         |          |
%%         |          |
%%         |          |
%%         |          |
%%         |          |
%%        _|__________|_       _            _
%%         |          |         |          |
%%
%%
%%  This style option also prints (outside the page area) a timestamp,
%%  a job ID, and the page number and a sequence number on each page.
%%  The sequence number advances throughout the document, so even if
%%  there is a page (i) and several pages 1, only the first page
%%  will have sequence number 1.
%%
%%  An oversight in the original version sometimes caused the tag line
%%  to be printed in an unusual font (if that was the last-used font
%%  on the preceding page).  The current version explicitly sets the
%%  font for the tag line so that this won't happen.  The default is
%%  to use cmr10, since it's highly unlikely that there are any TeX
%%  sites that don't have this font available, but the \pffont macro
%%  is provided in case another font is desired.
%%
%%  Two more features have been added: an "inner skeleton", consisting
%%  of rules that demarcate the header, footer, and text area, and a
%%  "text grid" that can be placed inside the text area.  Use
%%  "\innerskeltrue" or "\innerskelfalse" to control the skeleton
%%  and "\textgridtrue" or "\textgridfalse" to control the text grid.
%%  Use (for example) "\gridsize{10pt}{12pt}" to make a grid whose
%%  squares have width 10pt and height 12pt.
%%
%%  To use this style option, include pageframe as an optional argument
%%  in the \documentstyle command, e.g.
%%
%%                 \documentstyle[pageframe]{book}
%%
%%  Also you must tell LaTeX the height of the paper you are using
%%  (it can deduce the width for itself).  You do this by including
%%  a declaration such as
%%                         \paperheight{9in}
%%
%%  in the preamble of your document.  This *must* appear before
%%  the first page of output, because the new output routine
%%  uses this value.  (If you forget to specify it, then two
%%  things will happen: the vertical rules at the sides of the
%%  text will disappear, because LaTeX thinks they have height 0pt,
%%  and the rule that represents the bottom of the paper will be
%%  flush against the bottom of the footer.)
%%
%%  Since this style file modifies (a part of) LaTeX's output routine,
%%  it is exceedingly unlikely to be compatible with any other style
%%  option that also modifies the output routine.
%%
%%  Please direct comments and bug reports by electronic mail
%%  to texline@cup.cam.ac.uk
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\NeedsTeXFormat{LaTeX2e}[1997/12/01]
\ProvidesPackage{pagefram}[1998/04/23 v0.2 CUP LaTeX 2e package]

\def\vb@xt@{\vbox to}
\let\@themargin=\oddsidemargin

%%
%% This is the timestamp
%%
\@tempcnta\time\@tempcntb\@tempcnta
\divide\@tempcntb by 60\multiply\@tempcntb by 60\advance\@tempcnta-\@tempcntb
\divide\@tempcntb by 60
\edef\@@@timestamp{\vrule \@height.4in \@depth.3in \@width\z@
	   \hskip.5in\today\space\space
	   \ifnum\@tempcntb<10 0\fi
	   \number\@tempcntb:\ifnum\@tempcnta<10 0\fi\number\@tempcnta
	   \space\space\space\space\space\space\jobname
	   \space\space\space\space\space\space
}

%%
%%  \pffont lets us specify the font to use for the tag line
%%  By default we use whatever font is current when this file is
%%  being loaded.  This will normally be cmr10; in any case we're
%%  selecting a font which is (a) certainly available on the system
%%  were running on and (b) probably suitable for this purpose
%%  (normal-sized roman text).
%%
\def\pffont#1{\global\font\@@@pffont=#1\relax}
\def\@@@pffont{\global\let\@@@pffont}
\expandafter\@@@pffont\the\font

\newcount\@@@sheetcount

%%
%% This is the code that makes the "inner skeleton".
%%
\newif\ifinnerskel
\newif\iftextgrid
\textgridtrue
\newdimen\@@@gridwd\newdimen\@@@gridht
\def\gridsize#1#2{\global\@@@gridwd#1\global\@@@gridht#2}
\@@@gridwd 10\p@ \@@@gridht 10\p@

\def\@@@innerskel{\vb@xt@\z@{%
\vskip \topmargin
\vb@xt@\z@{\vss\hrule \@width\textwidth}%
\vskip \headheight
\vb@xt@\z@{\vss\hrule \@width\textwidth}%
\vskip \headsep
\vb@xt@\z@{\vss\hrule \@width\textwidth}%
\iftextgrid
\vb@xt@\z@{\vb@xt@ \textheight{%
\leaders\vb@xt@ \@@@gridht{\vss\hrule \@width\textwidth}\vfil
}\vss}%
\fi
\hb@xt@ \textwidth{\llap{\vrule \@height\textheight}%
\iftextgrid\leaders\hb@xt@\@@@gridwd{\hfil\vrule \@height\textheight}\fi\hfil
\vrule \@height\textheight}%
\vb@xt@\z@{\vss\hrule \@width\textwidth}%
\vskip \footskip
\vb@xt@\z@{\vss\hrule \@width\textwidth}%
\vskip -\footheight
\vb@xt@\z@{\vss\hrule \@width\textwidth}%
\vss
}}

%%
%%  The paper width can be deduced from the text width and margins,
%%  but the paper height must be specified.
%%
\newdimen\@@@pageheight
\def\paperheight#1{\global\@@@pageheight#1}
\newdimen\@@@pagewidth

%%
%%  The part of the output routine that puts the frame on the
%%  page to represent the edge of the paper is surrounded by
%%  \ifpageframe...\fi so that it can be suppressed.
%%
\newif\ifpageframe
\pageframetrue

%%
%%  \@@@cropmark should be followed by two letters, the first of which
%%  is t or b (for top or bottom) and the second l or r (left or right).
%%  It makes a box of height, width, and depth 0pt, but with a
%%  crop mark extending above or below and left or right of the base point.
%%
%%  The arms of the crop mark do not quite meet, but are positioned
%%  so that if they were extended to meet, the meeting point would be
%%  the corner of the paper.  This is to allow a little leeway for
%%  positioning and cutting the paper.
%%
\def\@@@cropmark#1#2{%
\csname#2lap\endcsname{%
\vb@xt@\z@{%
\if#1t\vss\else
\hb@xt@ .5in{\if#2r\hfil\fi
\vrule \@width.45in \@height.4\p@ \@depth\z@\if#2l\hfil\fi}%
\vglue.05in\fi%
\hb@xt@ .5in{\if#2l\hfil\fi\vrule \@height.45in \@depth\z@\if#2r\hfil\fi}%
\if#1b\vss\else
\vglue.05in%
\hb@xt@ .5in{\if#2r\hfil\fi
\vrule \@width.45in \@height.4\p@ \@depth\z@\if#2l\hfil\fi}%
\fi%
}}%
}

\newcommand\killcropmarks{\global\let\@@@cropmark\@gobbletwo}

\let\@theothermargin\@themargin

\newif\ifnoinfo  \noinfotrue % turns of timestamp etc. at top of page

\newif\if@NextPageStyle
\newcount\@NextCount
\newcount\@NextLimit

\newcommand\nextpagestyle{\@ifnextchar[{\@xnextpstyle}{\@xnextpstyle[0]}}
\def\@xnextpstyle[#1]#2{%
  \global\@NextCount=\z@
  \ifnum#1=\z@
    \global\@NextLimit=\tw@
    \global\@NextPageStyletrue
    \gdef\@NextStyle{#2}%
  \else
    \ifnum#1<\tw@
      \errmessage{The [n] argument in the \string\nextpagestyle
                  \space command must be >1.^^J
                  \space The command has been ignored}%
    \else
      \global\@NextLimit=#1\relax
      \global\advance\@NextLimit \@ne
      \global\@NextPageStyletrue
      \gdef\@NextStyle{#2}%
    \fi
  \fi
}

% Adapted from LATEX.LTX [1997/12/01]

\ifx\normalsfcodes\undefined \let\normalsfcodes\relax\fi

\def\@outputpage{%
  \begingroup           % the \endgroup is put in by \aftergroup
    \let \protect \noexpand
    \@resetactivechars
    \@parboxrestore
    \global\advance\@@@sheetcount \@ne
    \shipout \vbox{%
      \set@typeset@protect
      \aftergroup \endgroup
      \aftergroup \set@typeset@protect
                                % correct? or just restore by ending
                                % the group?
      \if@specialpage
        \global\@specialpagefalse\@nameuse{ps@\@specialstyle}%
      \fi
      \if@NextPageStyle
        \ifnum\@NextCount>\z@
          \ifnum\@NextCount<\@NextLimit
            \@nameuse{ps@\@NextStyle}%
          \else
            \global\@NextPageStylefalse
          \fi
        \fi
      \fi
      \if@twoside
        \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot
          \let\@themargin\oddsidemargin
          \let\@theothermargin\evensidemargin
        \else \let\@thehead\@evenhead
          \let\@thefoot\@evenfoot \let\@themargin\evensidemargin
          \let\@theothermargin\oddsidemargin
        \fi
      \fi
      \reset@font
      \normalsize
      \normalsfcodes
      \let\label\@gobble
      \let\index\@gobble
      \let\glossary\@gobble
      \baselineskip\z@skip \lineskip\z@skip \lineskiplimit\z@
      \@begindvi
      \vb@xt@\z@{\vss
        \hbox{\ifnoinfo \else
          \@@@pffont\@@@timestamp Sheet number \number\@@@sheetcount
          \space\space Page number \thepage\fi}%
        \hrule \@height\z@ \@depth\z@
      }%
      \@@@pagewidth\@themargin \advance\@@@pagewidth\textwidth
      \advance\@@@pagewidth\@theothermargin
      \hbox{\@@@cropmark tl\hskip\@@@pagewidth\@@@cropmark tr}%
      \ifpageframe \vb@xt@\z@{\vss\hrule \@width\@@@pagewidth}\fi
      \hbox{%
        \ifpageframe
          \llap{\vrule \@height\z@ \@depth\@@@pageheight}%
        \else
          \vrule \@height\z@ \@depth\@@@pageheight \@width\z@
        \fi
        \hskip\@themargin
        \vtop{%
          \ifinnerskel\@@@innerskel\fi
          \vskip \topmargin
%%%          \moveright\@themargin
          \vbox {%
            \setbox\@tempboxa \vbox to\headheight{%
              \vfil
              \color@hbox
              \normalcolor
              \hb@xt@\textwidth {\@thehead}%
              \color@endbox
            }%                        %% 22 Feb 87
            \dp\@tempboxa \z@
            \box\@tempboxa
            \vskip \headsep
            \box\@outputbox
            \baselineskip \footskip
            \color@hbox
            \normalcolor
            \hb@xt@\textwidth{\@thefoot}%
            \color@endbox
          }%
        }%
        \ifpageframe
          \hskip\@theothermargin
          \rlap{\vrule \@height\z@ \@depth\@@@pageheight}%
        \fi
      }%
      \ifpageframe \vb@xt@\z@{\hrule \@width\@@@pagewidth\vss}\fi
      \hbox{\@@@cropmark bl\hskip\@@@pagewidth\@@@cropmark br}%
    }%
    \global \@colht \textheight
    \stepcounter{page}%
    \global\advance\@NextCount \@ne
    \let\firstmark\botmark
}

\endinput

% End of file pagefram.sty

