summaryrefslogtreecommitdiff
path: root/macros/plain/contrib/mtbe/outform.tex
blob: f70e9d7e8a8df9802718019c27c3c3a9fa62838e (plain)
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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
%%% File: OutForm.tex
%%% From `Mathematical TeX by Example' by Arvind Borde
%%% (c) 1993, Academic Press.
%%% Contents: The format commands for the `output' pages (i.e., right hand)
%%% of the Examples in Chapter 2 of `Mathematical TeX by Example'.

\input StdPage   % The file containing the standard MTBE page specifications.

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

% Note: most typeface names used in this file have been defined in `StdPage'.
\font\sevenit=cmti7                       % For book titles in the margin.
\font\ExampleTitleFont=cmbx12 scaled\magstep1 % For Example Titles.
\font\ExampleTypeFont=cmsl12 scaled \magstep2 % For Example Types.
\font\ExampleTypeCal=cmsy10 scaled \magstep3  % For `Cal' in Example Types.  
\font\SmExampleTypeCal=cmsy7 scaled \magstep3 % For scriptsize Cal. 
\font\BigEightsy=cmsy8 scaled \magstep3       % For small Cal. 
\def\ExampleTypeFonts{\textfont2=\ExampleTypeCal 
                    \scriptfont2=\SmExampleTypeCal
                    \let\Eightsy\BigEightsy \ExampleTypeFont}

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

\def\EnoughAlready{$$\vdots$$ \EndPage}

%---------------------------------------------------------------------------_%
%%% EXAMPLE COMMANDS:

\newtoks\Author             % To store the name of the author of the source.
\newtoks\BookTitle          % To store the name of the book/journal.
\newtoks\PublishInfo        % To store publisher information.
\newtoks\CopyrightDate      % To store information about the copyright date.
\newtoks\Example            % To store information about the example.
\newtoks\ExampleType        % To store information about the example type.
\newcount\ExampleNumber     % For the example number.
\newcount\StartExample      % Start-of-example indicator.
\newdimen\LMarginOdd        % Left margin on odd-numbered pages.
\newdimen\LMarginEven       % Left margin on even-numbered pages.

\outer\def\NewExample{\hsize\StdHsize  \vsize\StdVsize  \parindent\indsize
            \StartExample=1
            \LMarginOdd=.625in  \LMarginEven=.625in  \voffset0in
            \headline={\hfil}\global\advance\ExampleNumber by1
            \leftline{\ExampleTypeFonts\the\ExampleType} 
            \vskip2pc\relax
            \message{+\the\ExampleNumber+}
            \setbox0=\hbox{\ExampleTitleFont 1}\dimen0=-\ht0
            \divide\dimen0 by2 \advance\dimen0 by.75pt
            \dimen1=-\dimen0 \advance\dimen1 by1pt
            \centerline{\vrule width8pc height\dimen1 depth\dimen0
            {\ExampleTitleFont \ \ Example \the\ExampleNumber\ \ }\vrule 
             width8pc height\dimen1 depth\dimen0 }
             \Example={\the\ExampleNumber}% 
            \vskip1pc\relax \noindent
            From {\tenit \the\BookTitle}
            \edef\Test{\the\Author}%
            \ifx\Test\empty \else \EndLine 
               {\spaceskip.3333em\relax
               \LCSmCaps{\the\Author}} \fi
            \edef\Test{\the\PublishInfo}%
            \ifx\Test\empty \else \EndLine {\tenrm\the\PublishInfo}\fi
            \edef\Test{\the\CopyrightDate}%
            \ifx\Test\empty \else\unskip{\tenrm,\ \the\CopyrightDate}\fi
            \vskip1pc\relax \noindent \ignorespaces}
\def\ShortExample <#1>{\medbreak
       \line{\vrule width.4pt depth2.6pt height.4pt\hrulefill
            \vrule width.4pt depth2.6pt height.4pt}\nointerlineskip
       \leftline{\Eightbf (Page #1)} 
            \nobreak}
\def\EndShortExample{\nobreak\vskip-1pt
       \line{\vrule width.4pt depth0pt height3pt\hrulefill
             \vrule width.4pt depth0pt height3pt}\medbreak}
\def\NegVspace{\ifvmode\nointerlineskip\fi
          \nobreak\vskip-3pt\relax} % Reduces space.

%---------------------------------------------------------------------------_%
%%% TOWARDS THE OUTPUT ROUTINE:

\newdimen\RMargin          % The right margin size.
\newdimen\BotMargin        % The bottom margin size.
\newcount\ChapIndicator    % For compatibility with BookForm.tex

\def\Issue{}
\def\Volume #1,#2(#3){\def\Issue{{\fivebf #1},#2(#3)}}
\def\lcopyr{\leavevmode\hbox{{\fivesy\char'15}\llap{\fiverm c\kern.3em }}}

\def\StandardPage{\vbox{\makeheadline\pagebody\makefootline 
        \advance\BotMargin by-24pt\vglue\BotMargin}}
\def\RightMarginStuff{\vbox{\parskip0pt \hsize.75in \advance\hsize by-.4pt
                    \parindent0pt \hbadness5000 \raggedleft \pretolerance10000 
                    \vbox to 0pt{\vskip-.5in
                      \rightline{\TopofRMarg{\MarginFont
                      Example~\:\the\Example}}\vss}
                    \dimen0=\vsize \advance\dimen0 by \BotMargin
                    \advance\dimen0 by\voffset
                    \nointerlineskip
                    \vbox to \dimen0{\null \vskip.25in 
                                    \baselineskip 6 pt \fiverm Source:
                                    \smallskip
                                    {\sevenit \baselineskip8pt \the\BookTitle
                                    \smallskip }
                                    \edef\Test{\the\Author}
                                    {\ifx\Test\empty \removelastskip \else
                                      \spaceskip=.1667em\relax
                                      \let\ZZ=\& \def\&{\:\ZZ\:}
                                      \uppercase\expandafter{\the\Author} \fi
                                    \smallskip}
                                    \edef\Test{\the\CopyrightDate}
                                    \ifx\Test\empty \else
                                       \lcopyr\ \the\CopyrightDate\break \fi
                                    \edef\Test{\the\PublishInfo}
                                    \ifx\Test\empty \Issue \else
                                        \the\PublishInfo \fi
                                    \advance\dimen0 by-\StdVsize
                                    \vskip\dimen0 \vfill}}}
\def\AugmentedPage{\vbox{\ifnum\StartExample=1 
         \headline={\hfil}\footline={\hfil\SmallPnoFont\Folio\hfil}%
         \def\makefootline{\baselineskip36pt \line{\the\footline}}%
         \StandardPage 
       \else 
         \ifnum\ChapIndicator=1 \else\footline={\hfil}\fi
         \ifodd\pageno \dimen0=-\LMarginOdd \else \dimen0=-\LMarginEven \fi  
         \advance\dimen0 by6.625in \hbox to \dimen0
         {\StandardPage \hskip\RMargin \BotCornerVrule \hss
         \RightMarginStuff }\nointerlineskip
         {\dimen0=\hsize \advance\dimen0 by\RMargin \advance\dimen0 by.4pt
              \hbox to \dimen0{\hfil \BotCornerHrule}}
        \fi}\global\StartExample=0 }% _%
\def\MarkPageCorner{\def\BotCornerVrule{\vrule height36pt width.4pt depth0pt} 
                  \def\BotCornerHrule{\vrule width36.4pt height.4pt depth0pt}}
\def\DontMarkPageCorner{\def\BotCornerVrule{\hskip-\RMargin} 
                        \def\BotCornerHrule{}}

% Here comes a small cheat:
\def\plainoutput{\ifodd\pageno \RMargin=\LMarginEven \else 
                   \RMargin=\LMarginOdd \fi % Assuming mirror symmetry.
                 \shipout\AugmentedPage 
                  \advancepageno \global\advance\RealPno by2
                  \ifnum\outputpenalty>-20000 \else\dosupereject\fi}%

% Defaults:
\DontMarkPageCorner  
\BotMargin=0pt

%----------------------------------------------------------------------------
\catcode`\@=14   % Need this in places.
\endinput