%%% File: StdPage.tex
%%% From `Mathematical TeX by Example' by Arvind Borde
%%% (c) 1993, Academic Press.
%%% Contents: The page layout, standard fonts, etc., used across the board in 
%%% all the files of `Mathematical TeX by Example'.

\input Utility

%----------------------------------------------------------------------------
%%% TYPEFACE NAMES:

\font\TitleFont=cmb10 scaled 2986   % For chapter titles.
\def\TitleFonts{\TitleFont}         % Needed for redefinition purposes later.
\font\NumFont=cmb10 scaled 5160     % For the large chapter numbers.
\font\SubTitleFont=cmbx12           % For subsection titles.
\font\SubTitlett=cmtt10 scaled 1200 % Also used in section titles.
\def\SubTitleFonts{\SubTitleFont}   % Needed for redefinition purposes later.
\font\SubSectionTitleFont=cmti10 scaled\magstephalf % For subsection titles.
\font\Bigsy=cmsy10 scaled 1200      % For `bullets' in subsection titles.
\font\SmallPnoFont=cmfib8           % For page numbers at the bottom.
\font\PnoFont=cmfib8 scaled\magstep1   % For page numbers in the margin.
\font\Smallcaps=cmcsc10             % Small capitals, used in many places.
\let\sc=\Smallcaps \let\smc=\Smallcaps % For compatibility w/other packages.
\font\Sansserif=cmss10              % Sans serif, used in many places.
\let\sf=\Sansserif                  % For LaTeX compatibility.
\font\Ninerm=cmr9   
\let\Smallrm=\Ninerm    % Used in places to give unobtrusive numerals, etc.

% For section titles in the margins:
\font\Eightbf=cmbx8  
\font\Eighttt=cmtt8
\let\MarginFont\Eightbf 

% For chapter and section titles that use several fonts:
\def\UseBigCal{\font\TitleCal=cmbsy10 scaled2986
                \def\TitleFonts{\textfont2=\TitleCal 
                    \exhyphenpenalty10000 \pretolerance10000 
                    \hbadness10000 \TitleFont}}
\def\Trick#1{{\Ninebf\uppercase{#1}}} % Used for the LaTeX logo in titles.
\def\UseMedCal{\font\SubTitleCalFont=cmbsy10 scaled\magstep1
               \font\SmSubTitleCalFont=cmbsy9
               \font\Tenbsy=cmbsy10 
               \font\Ninebf=cmbx9
                \def\SubTitleFonts{\textfont2=\SubTitleCalFont
                    \scriptfont2=\SmSubTitleCalFont
                  \let\Eightsy\Tenbsy \let\Smallcaps\Trick 
                  \SubTitleFont}}

%---------------------------------------------------------------------------_%
%%% REPRODUCING INPUT: 

\let\XXX=\Literal   % Temporary assignment.
\def\Literal {\XXX \cc`\*=12 \losenolines} % Redefine `\Literal' for use here.
{\cc`\^^M=\active % 
\gdef\losenolines{\cc`\^^M=\active \def^^M{\leavevmode\endgraf}}}

% Use these to display input:
\def\beginliteral{\penalty1000\vskip3pt plus2pt minus1pt \Literal \cc`\"=12 %
  \parskip0pt \parindent\indsize \baselineskip2.77ex \thatisit}
{\cc`\@=0 \cc`\\=12 @cc`@^^M=@active %
 @gdef@thatisit^^M#1\endliteral{#1@endgroup%
   @vskip.8@smallskipamount@noindent@ignorespaces}}

%----------------------------------------------------------------------------
%%% MISCELLANEOUS:

% First, a utility command that gives lowercase small capitals:
\def\LCSmCaps#1{{\let\ZZ=\&\def\&{{\sevenrm\:\ZZ\:}}\Smallcaps 
                    \xspaceskip=.1667em\relax
                    \lowercase\expandafter{#1}}} 
% Next, utilities to save typing; the first of these typesets references
% in the correct format.
\def\Ref#1[#2]{\LCSmCaps{#1}{\Smallrm [#2]}} 
\def\[#1]{{\Sansserif #1}}

%----------------------------------------------------------------------------
%%% CHAPTER AND SECTION FORMATTING:

\newskip\BelowTitleSkip \BelowTitleSkip=4.5pc plus .5pc % Note: 1pc=12pt
\newcount\StartAnew 
\newtoks\NameofChapter
\newtoks\SectionLabel
\newcount\SectionNumber
\newcount\ChapterNumber  
\newcount\NumberSectionLbl   \NumberSectionLbl=1  % An indicator; see below.

\def\NoSections{\NumberSectionLbl=0} % For chapters without sections.

% The command that creates the format for chapter titles:
\outer\def\Title #1/#2\par{\ChapterNumber=#1
              {\parindent0pt 
              \ifnum\ChapterNumber>0 {\NumFont\the\ChapterNumber}\medskip\fi
              \pretolerance1000 \TitleFonts \righthyphenmin=50 
              \raggedright \baselineskip2.75ex  #2\par}
              \NameofChapter={\tensl#2}\StartAnew=1 \SectionNumber=0 
              \SectionLabel={}\mark{}\vskip\BelowTitleSkip\relax
              \noindent\ignorespaces}% _%
% The command that follows does several things. It tests the current
% position on the page by comparing `\pagetotal' and a reduced value of
% `\pagegoal'. If there is enough space available to start a new section on
% the current page, the section begins there (after a vertical skip);
% otherwise, the section begins on the next page. The command also defines 
% what is to go in the `token lists' called `\LMargStuff' and `\RMargStuff'
% (see the output routine at the end of this file) and it `marks' the material
% that is to go in the margin. Further, the command typesets the section title
% and section number.
\def\NewSection #1\par{\par \dimen0=\pagegoal \advance\dimen0 by-120pt
                       \ifdim\pagetotal>\dimen0 
                          \ifdim\pagetotal<\pagegoal \EndPage 
                          \else \vskip 24pt plus 10pt minus 6pt \fi
                       \else \vskip 24pt plus 10pt minus 6pt \fi
                       \LMargStuff={\MarginFont
                            \iftrue\firstmark\fi}
                       \RMargStuff={\MarginFont
                            \iftrue\botmark\fi}
                       \global\advance\SectionNumber by1
                       \leftline{\SubTitleFonts \let\tt\SubTitlett
                             \the\ChapterNumber.\the\SectionNumber\ \ #1} 
                       \ifnum\NumberSectionLbl=1
                            \SectionLabel={\tenrm \quad
                            \S\:\the\ChapterNumber.\the\SectionNumber}
                       \else
                            \SectionLabel={}
                       \fi
                       \mark{#1\noexpand\else \the\SectionLabel}
                       \vskip 12pt plus2pt minus4pt\noindent\ignorespaces}%
% The next command is used in starting subsections:
\def\NewSub #1\par{\par \dimen0=\pagegoal \advance\dimen0 by-40pt
                       \ifdim\pagetotal>\dimen0 
                          \ifdim\pagetotal<\pagegoal \EndPage 
                          \else \vskip 12pt plus6pt minus4pt\fi
                       \else \vskip 12pt plus6pt minus4pt\fi
                    \leftline{\Bullet\SubSectionTitleFont\ \:#1}
                    \nobreak\vskip6pt plus1pt minus2pt\noindent\ignorespaces}%
\def\Bullet{\leavevmode\raise.5pt\hbox{\Bigsy\char15 }}% _%
% The next few commands go towards creating the large, `illuminated'  
% opening letter that starts each chapter. The commands are crude,
% `one-shot' ones, meant just to serve for this book. But, they may
% help suggest how more general ones may be constructed. 

% The first command, `\Patbox', fills the edges of a box of fixed size 
% with nonletter characters from a given font (the height of each character 
% is first examined, and only ones of height above a certain value are used).

\def\Patbox #1#2{\vbox to 44pt{\hsize42pt \lineskip 0pt
    \parindent0pt \baselineskip4.75pt \parfillskip0pt \hbadness10000
    \count255=#2\font\temp=#1 \fontdimen2 \temp=0pt \temp \vfil
    \def\X{\loop 
             \ifnum\count255=60 \global\count255=63 \fi   % Skip <, /, >.
             \ifnum\count255=65 \global\count255=91 \fi   % Skip letters.
             \ifnum\count255=97 \global\count255=123 \fi  % Skip letters.
             \ifnum\count255=126 \global\count255=0 \fi   % Start over.
             \setbox0=\hbox{\char\count255}\ifdim\ht0<3pt 
                \global\advance\count255 by 1 
           \repeat % Use only the tall guys.      
        \unhbox0 \hskip0pt minus.5pt\global\advance\count255 by 1 }
    \hfuzz.2pt
    \line{\X\hfil\X\hfil\X\hfil\X\hfil\X\hfil\X\hfil\X\hfil\X}
    \line{\X\hfil\X}\line{\X\hfil\X}\line{\X\hfil\X}
    \line{\X\hfil\X}\line{\X\hfil\X}\line{\X\hfil\X}\line{\X\hfil\X}
    \line{\X\hfil\X\hfil\X\hfil\X\hfil\X\hfil\X\hfil\X\hfil\X}}}

% Next, the font that will be used for the large letter is chosen:

\font\BigFancy=cmr7 scaled 5160

% Finally, the main command is constructed. Its first argument is the 
% font that will be used for the boundary pattern (only 5-point fonts really
% work well, and then too not all of them); the second, the starting
% character position in that font; the third, the first letter of the 
% paragraph that is to just open; the fourth and fifth, the first two 
% words of that paragraph (spaces are used to `delimit' these arguments;
% the words will appear in small capitals.

\def\Fancy #1#2#3#4 #5 {\noindent \hangindent46pt \hangafter-4
      \llap{\vbox to0pt{\vss
      \hbox{\Patbox{#1}{#2}\kern-42pt
      \vbox to44pt{\hsize42pt\vfil
           \vskip3pt\centerline{\hskip2pt\BigFancy #3}\vfil
      }}\vskip-3\baselineskip}\hskip4pt}{\Smallcaps #4\ #5\ }}  
      
% FOR EXAMPLE:
%     `\Fancy{cmbsy5}{12} Let us begin with a bang.'
% This will cause a large `L' to appear, surrounded by the taller characters 
% of the font cmbsy5, starting with character number 12; the first two 
% words will also appear capitalized.

%---------------------------------------------------------------------------_%
%%% IN THE MARGINS:

\def\TopofRMarg #1{\vtop{\hsize .75in \parindent0pt \parskip0pt
             \rightskip0pt \leftskip0pt % Just for protection.
             \line{\vrule width1pt \hfil
             \dimen0=\hsize \advance\dimen0 by-1pt \dimen1=10pt 
             \vtop to\dimen1{\hsize\dimen0 \rightline{\PnoFont \Folio}\vfil}}
              \Raggedleft \pretolerance10000 \lefthyphenmin=50 \hbadness10000  
              \vrule height18pt width0pt #1\baselineskip2.7ex}}%
\def\TopofLMarg #1{\vtop{\hsize .75in \parindent0pt \parskip0pt 
             \rightskip0pt \leftskip0pt % Just for protection.
             \line{\dimen0=\hsize \advance\dimen0 by-1pt \dimen1=10pt  
             \vtop to\dimen1{\hsize\dimen0 
               \leftline{\PnoFont \Folio}\vfil}\hfil \vrule width1pt}
              \Raggedright \pretolerance10000 \lefthyphenmin=50 \hbadness10000 
              \vrule height18pt width0pt #1\baselineskip2.7ex}}     

%----------------------------------------------------------------------------
%%% PAGE NUMBERING:

\countdef\RealPno=1  % To be used as the `real' page number for this book.
  \RealPno=1         % Default starting value
\def\Folio{\ifnum\RealPno<0 \romannumeral-\RealPno \else \number\RealPno \fi}
  
%----------------------------------------------------------------------------
%%% OUTPUT ROUTINE:

\newtoks\LMargStuff   
\newtoks\RMargStuff
\newdimen\Llmargspace  \Llmargspace=.5in
\newdimen\Rrmargspace  \Rrmargspace=.5in
\newdimen\Lhoffset     \Lhoffset=.75in
\newdimen\Rhoffset     \Rhoffset=0in

\def\MTBEoutput {\ifodd\RealPno \hoffset\Rhoffset \else \hoffset\Lhoffset \fi
   \ifnum\StartAnew=1 
      \headline={\hfil}
      \footline={\hss\SmallPnoFont\Folio\hss}
   \else
      \footline={\hfil}
      \ifodd\RealPno   
         \headline={\hfil \the\NameofChapter\expandafter\iffalse\botmark\fi  
             \rlap{\hskip\Rrmargspace\TopofRMarg{\the\RMargStuff}}}
      \else
         \headline={\llap{\TopofLMarg{\the\LMargStuff}\hskip\Llmargspace 
          }\the\NameofChapter\hfil}
      \fi
   \fi
   \plainoutput \Advancepageno \global\StartAnew=0 }% _%
\def\UseMTBEoutput{%
  \gdef\Advancepageno{\ifnum\RealPno<0 \global\advance\RealPno by -1
    \else\global\advance\RealPno by1 \fi }
  \gdef\makefootline{\baselineskip36pt \line{\the\footline}}
  \gdef\makeheadline{\vbox to 0pt{\vskip-.5in 
     \line{\vbox to 8.5pt{}\the\headline}\vss}\nointerlineskip}
  \output={\MTBEoutput}}

%----------------------------------------------------------------------------
%%% PARAGRAPH AND PAGE LAYOUT:

\newdimen\indsize   \indsize23pt
\parindent\indsize

\widowpenalty300   \clubpenalty300

\newdimen\StdHsize \StdHsize=4.75 in
\newdimen\StdVsize \StdVsize=7in
\hsize\StdHsize  \vsize\StdVsize 

%----------------------------------------------------------------------------
\endinput
