%%% File: EulConc.tex
%%%
%%% Contents:
%%% Macros that load the `AMS Euler' and `Computer Concrete' classes 
%%% of fonts and switch mathematics and text to these fonts.
%%%    
%%% This file is a modification by Arvind Borde of Donald Knuth's `gkpmac.tex' 
%%% file; that file contained macros for the book `Concrete Mathematics', and 
%%% all of the really hard work involved in preparing this package was done 
%%% by Donald Knuth there.
%%%
%%% WARNING: This is an experimental file; no responsibility
%%%          is assumed for any of its contents.

% First check to see if the file has already been used as input (if it has, 
% then we go no further):
\ifx\eulconc\fmtversion\endinput\else\let\eulconc=\fmtversion\fi
 
% A warning:
\def\error{\message{ WARNING! You've got other fonts in places I want.}}

% Fonts for regular text:
\font\textrm=ccr10                 % roman
\font\textit=ccti10                % italic 
\font\textsl=ccsl10                % slanted 
\font\textbf=cmbx10                % bold: this is just Computer Modern
\font\textcsc=cccsc10              % caps and small caps
\font\oldsty=ccmi10                % for equation numbers
 
% Fonts for regular math
 
\font\mathtext=ccr10
 \font\mathsubtext=ccr7
 \font\mathsubsubtext=ccr5
\font\mathlet=eurm10
 \font\mathsublet=eurm7
 \font\mathsubsublet=eurm5
 \skewchar\mathlet='177 \skewchar\mathsublet='177 \skewchar\mathsubsublet='177
\font\mathsym=cmsy10
 \font\mathsubsym=cmsy7
 \font\mathsubsubsym=cmsy5
 \skewchar\mathsym='60 \skewchar\mathsubsym='60 \skewchar\mathsubsubsym='60
\font\mathext=cmex10
 \font\mathsubext=cmex10
 \font\mathsubsubext=cmex10
\font\mathscr=eusm10
 \font\mathsubscr=eusm7
 \font\mathsubsubscr=eusm5
 \skewchar\mathscr='60 \skewchar\mathsubscr='60 \skewchar\mathsubsubscr='60
\font\mathfr=eufm10
 \font\mathsubfr=eufm7
 \font\mathsubsubfr=eufm5
\font\matheuex=euex10
\font\boldmathlet=eurb10 
 \font\boldmathsublet=eurb7
 \font\boldmathsubsublet=eurb5
 \skewchar\boldmathlet='177 \skewchar\boldmathsublet='177 
   \skewchar\boldmathsubsublet='177
 
% Fonts for small type:
 
\font\gmathtext=ccr8
 \font\gmathsubtext=ccr6
 \font\gmathsubsubtext=ccr5
\font\gmathlet=eurm8 
 \font\gmathsublet=eurm6 
 \font\gmathsubsublet=eurm5
 \skewchar\gmathlet='177 \skewchar\gmathsublet='177 \skewchar\gmathsubsublet='177
\font\gmathsym=cmsy8
 \font\gmathsubsym=cmsy6
 \font\gmathsubsubsym=cmsy5
 \skewchar\gmathsym='60 \skewchar\gmathsubsym='60 \skewchar\gmathsubsubsym='60
\font\gmathext=cmex8
 \font\gmathsubext=cmex8
 \font\gmathsubsubext=cmex8
\font\gmathscr=eusm8
 \font\gmathsubscr=eusm6
 \font\gmathsubsubscr=eusm5
 \skewchar\gmathscr='60 \skewchar\gmathsubscr='60 \skewchar\gmathsubsubscr='60
\font\gmathfr=eufm8
 \font\gmathsubfr=eufm6
 \font\gmathsubsubfr=eufm5
\font\gmatheuex=euex8
 
\font\foliofont=cmr9
\font\gtfont=cmmi9 % for the \t accent
 
% Normal text conventions
 
\catcode`\@=11 % borrow the private macros of Plain.tex (with care)
\def\wlog#1{}  % don't put allocation info into the log
 
\let\sc=\textcsc
\let\smc=\sc              % For compatibility with AmSTeX.
\def\textindent#1{\noindent\hbox to\parindent{\bf#1\hfil}\ignorespaces}
\def\exitem{\hangindent2\parindent \textindent}
\def\Bf#1{\hbox{\bf#1}}  % For bold text in math (not bold math letters).

\textfont0=\mathtext
 \scriptfont0=\mathsubtext
 \scriptscriptfont0=\mathsubsubtext
\textfont1=\mathlet \let\tfont=\teni
 \scriptfont1=\mathsublet
 \scriptscriptfont1=\mathsubsublet
\textfont2=\mathsym
 \scriptfont2=\mathsubsym
 \scriptscriptfont2=\mathsubsubsym
\textfont3=\mathext
 \scriptfont3=\mathsubext
 \scriptscriptfont3=\mathsubsubext
\def\rm{\fam\z@\textrm}
\def\it{\fam\itfam\textit} % \it is family 4, defined in PLAIN
\def\sl{\textsl}
\textfont\itfam=\textit
\newfam\scrfam \ifnum\scrfam=8\relax\else\error\fi % family 8, script
\textfont\scrfam=\mathscr
 \scriptfont\scrfam=\mathsubscr
 \scriptscriptfont\scrfam=\mathsubsubscr
\def\scr{\fam8 }
\mathcode`0="7130
\mathcode`1="7131
\mathcode`2="7132
\mathcode`3="7133
\mathcode`4="7134
\mathcode`5="7135
\mathcode`6="7136
\mathcode`7="7137
\mathcode`8="7138
\mathcode`9="7139
\newfam\frfam % family 9, fraktur
\textfont\frfam=\mathfr
 \scriptfont\frfam=\mathsubfr
 \scriptscriptfont\frfam=\mathsubsubfr
\def\frak{\fam9 }
\newfam\euexfam % family 10, substitions for euler symbols
\newfam\boldletfam % family 11, bold math letters
\textfont\boldletfam=\boldmathlet
 \scriptfont\boldletfam=\boldmathsublet
 \scriptscriptfont\boldletfam=\boldmathsubsublet
\def\bf{\fam11 \textbf} % Therefore different effects in text and math.
 
\mathchardef\intop="1A52
\mathchardef\ointop="1A48
\mathchardef\coprod="1A60
\mathchardef\prod="1A51
\mathchardef\sum="1A50
\mathchardef\braceld="A7A \mathchardef\bracerd="A7B
\mathchardef\bracelu="A7C \mathchardef\braceru="A7D
\mathchardef\infty="0A31
 
\mathchardef\nearrow="3A25
\mathchardef\searrow="3A26
\mathchardef\nwarrow="3A2D
\mathchardef\swarrow="3A2E
\mathchardef\Leftrightarrow="3A2C
\mathchardef\Leftarrow="3A28
\mathchardef\Rightarrow="3A29
\mathchardef\leftrightarrow="3A24 \mathcode`\^^W="3A24
\mathchardef\leftarrow="3A20 \let\gets=\leftarrow \mathcode`\^^X="3A20
\mathchardef\rightarrow="3A21 \let\to=\rightarrow \mathcode`\^^Y"3A21
\def\uparrow{\delimiter"3A22378 } \mathcode`\^^K="3A22
\def\downarrow{\delimiter"3A23379 } \mathcode`\^^A="3A23
\def\updownarrow{\delimiter"3A6C33F }
\def\Uparrow{\delimiter"3A2A37E }
\def\Downarrow{\delimiter"3A2B37F }
\def\Updownarrow{\delimiter"3A6D377 }
\mathchardef\leftharpoonup="3A18
\mathchardef\leftharpoondown="3A19
\mathchardef\rightharpoonup="3A1A
\mathchardef\rightharpoondown="3A1B
 
\textfont\euexfam=\matheuex
\scriptfont\euexfam=\mathsubsym 
% Note: this is OK since we don't use all characters of euex in 
% subscripts/superscripts; otherwise we'd have to make euex7 and euex6.
\scriptscriptfont\euexfam=\mathsubsym % Only for \mathchoice.
\mathcode`+="292B
\mathcode`-="292D
\mathcode`!="0921
\mathcode`(="4928 \delcode`(="928300
\mathcode`)="5929 \delcode`)="929301
\mathcode`[="495B \delcode`[="95B302
\mathcode`]="595D \delcode`]="95D303
\mathcode`=="393D
\mathchardef\Relbar="303D % We need the old `=' to match \Arrows.
\mathchardef\Gamma="7100
\mathchardef\Delta="7101
\mathchardef\Theta="7102
\mathchardef\Lambda="7103
\mathchardef\Xi="7104
\mathchardef\Pi="7105
\mathchardef\Sigma="7106
\mathchardef\Upsilon="7107
\mathchardef\Phi="7108
\mathchardef\Psi="7109
\mathchardef\Omega="710A
\let\varsigma=\sigma \let\varrho=\rho % Euler doesn't have these.
\mathchardef\aleph="0840
\def\rbrace{\delimiter"5867A09 } \let\}=\rbrace
\def\lbrace{\delimiter"4866A08 } \let\{=\lbrace
%\mathchardef\equiv="3811 \let\cong=\equiv % lowres bars weren't spaced right
%\mathchardef\leq="3814 \let\le=\leq  % Where are they???
%\mathchardef\geq="3815 \let\ge=\geq  % Where are they???
\mathchardef\Re="083C
\mathchardef\Im="083D
\def\vert{\delimiter"86A30C }
\def\backslash{\delimiter"86E30F }
 
\setbox\strutbox=\hbox{\vrule height9pt depth4pt width\z@}%
\newbox\bigstrutbox \newbox\biggstrutbox
\setbox\bigstrutbox=\hbox{\vrule height11pt depth4pt width\z@}%
\def\bigstrut{\relax\ifmmode\copy\bigstrutbox\else\unhcopy\bigstrutbox\fi}
\setbox\biggstrutbox=\hbox{\vrule height17pt depth10pt width\z@}%
\def\biggstrut{\relax\ifmmode\copy\biggstrutbox\else\unhcopy\biggstrutbox\fi}
\baselineskip=13pt\rm

\newmuskip\normalthick \normalthick=5mu plus 5mu
\newmuskip\normalmedmu \normalmedmu=\medmuskip
\newmuskip\displaythick \displaythick=10mu minus 3mu
\everymath{\thickmuskip=\normalthick}
 
\abovedisplayskip=8pt plus 3pt minus 2pt % there's 2pt more (opened up)
\belowdisplayskip=10pt plus 3pt minus 2pt
 
% displays not centered; all have capability of \eqalign
\outer\def\begindisplay{\obeylines\startdisplay}
{\obeylines\gdef\startdisplay#1
  {\catcode`\^^M=5$$%
   \advance\displayindent\parindent\advance\displaywidth-\parindent%
   \openup2pt #1\halign\bgroup\span\preamble\cr}}
\outer\def\enddisplay{\crcr\egroup$$}
\jot=\z@  % we do our own opening up
 
\def\displaymath{$\thickmuskip=\displaythick\displaystyle}
\def\preamble{\hfil\displaymath{##}$&&\displaymath{{}##}$\hfil}
\def\tablepreamble{\bigstrut\hfil$##$\hfil\ &\vrule##&&\quad\hfil$##$\hfil}
\def\xbox{\qquad\hbox} % for third column of explanation
 
\newcount\eqcount
\def\equ(#1.#2){{\rm({\oldsty#1}.{\oldsty#2})}}
\def\eq(#1){\equ(\chapno.#1)}
\def\thiseq{\xdef\next{(\chapno.\number\eqcount)}\expandafter\equ\next}
\def\eqno{\global\advance\eqcount 1 \global\everycr{\makeeqno\thiseq}}
\newdimen\backup
\def\makeeqno#1{\noalign{\global\everycr{}%
  \advance\displaywidth\displayindent
  \setbox0=\hbox to\displaywidth{\hfil#1}%
  \backup=\prevdepth \advance\backup\ht0
  \setbox0=\vbox{\kern-\backup\box0}\ht0=\z@ \dp0=\z@
  \setbox0=\vbox{\box0}\unvbox0}} % that puts equation number on prev line!
 
 
\def\EightpointEC{% set up eightpoint style
 \baselineskip=9.6pt \lineskip=0pt \lineskiplimit=0pt
 \mathsurround=1pt
 \textfont0=\gmathtext
  \scriptfont0=\gmathsubtext
  \scriptscriptfont0=\gmathsubsubtext
 \textfont1=\gmathlet \let\tfont=\gtfont
  \scriptfont1=\gmathsublet
  \scriptscriptfont1=\gmathsubsublet
 \textfont2=\gmathsym
  \scriptfont2=\gmathsubsym
  \scriptscriptfont2=\gmathsubsubsym
 \textfont3=\gmathext
  \scriptfont3=\gmathsubext
  \scriptscriptfont3=\gmathsubsubext
\textfont\scrfam=\gmathscr
 \scriptfont\scrfam=\gmathsubscr
 \scriptscriptfont\scrfam=\gmathsubsubscr
\textfont\frfam=\gmathfr
 \scriptfont\frfam=\gmathsubfr
 \scriptscriptfont\frfam=\gmathsubsubfr
\textfont\euexfam=\gmatheuex
\scriptfont\euexfam=\gmathsubsym % OK since I don't use all chars in this size
 \def\rm{\fam\z@\gtext}%
 \let\oldsty=\gtext
 \let\big=\ninebig
 \setbox\strutbox=\hbox{\vrule height7.25pt depth2.75pt width\z@}%
 \gtext
 }
\def\ninebig#1{{\hbox{$\textfont0=\tenrm\textfont2=\tensy
  \left#1\vbox to7.25pt{}\right.\n@space$}}}
 
% Math operators
\def\2{\mskip-.5mu2\mskip.5mu}
\newmuskip\lessfortimes \lessfortimes=-2mu minus -2mu
\def\cdt{\mskip\lessfortimes\cdot\mskip\lessfortimes}
\def\nullnum{\phantom{0}}
\def\twonullnum{\phantom{00}}
\def\bex{\mskip-2mu}
\def\twoconditions#1#2{_{\scriptstyle#1\atop\scriptstyle#2}}
\def\tworestrictions#1#2{\vcenter{\offinterlineskip
  \halign{\strut\hfil##\hfil\cr#1\cr#2\cr}}}
\def\dts{\mathinner{\ldotp\ldotp}}
\def\[#1]{[\hbox{$\mskip1mu\thickmuskip=\thinmuskip#1\mskip1mu$}]}
\def\bigi[#1\bigr]{\bigl[\hbox{$\thickmuskip=\thinmuskip#1$}\bigr]}
\def\Bigi[#1\Bigr]{\Bigl[\hbox{$\thickmuskip=\thinmuskip#1$}\Bigr]}
\def\prp(#1){(\hbox{$\thickmuskip=\thinmuskip#1$})}
\def\pbigi(#1\bigr){\bigl(\hbox{$\thickmuskip=\thinmuskip#1$}\bigr)}
\def\_#1{\def\next{#1}%
 \ifx\next\risingsign\expandafter\rising\else^{\underline{#1}}\fi}
\def\risingsign{^}
\def\rising#1{^{\overline{#1}}}
\def\dotminus{\mathbin{\buildrel{\hbox{\runhead.}}\over{\smash{-}\vphantom{_2}}}}
\let\divides=\backslash
\def\edivides{\divides\mskip-4mu\divides}
\def\ndivides{\mathpalette\notdiv\relax}
\def\notdiv#1#2{\setbox0=\hbox{$#1\divides$}%
 \vcenter{\hbox to\wd0{$\hss\scriptscriptstyle/\hss$}}\kern-\wd0
 \vcenter{\hbox to\wd0{$\hss\kern.5pt\scriptscriptstyle/\hss$}}\kern-\wd0
 \box0\relax}
\def\spec{\mathop{\rm Spec}}
\def\half{{1\over2}}
\def\rp{\mathchar"323F } % relatively prime
\def\lcm{\mathop{\rm lcm}}
\def\And{\quad{\rm and}\quad}
\let\==\equiv
\def\tmod#1{(mod~$#1$)}
\let\implies=\Longrightarrow
\def\?{\hbox{!`}} % subfactorial
\def\hyp{\mathop{F{}}\nolimits\hyper}
\def\tightplus{\medmuskip=1.5mu\relax}
\def\hyper#1#2#3{\mathchoice{\tightplus
   \hbox{$\displaystyle\biggl({#1\atop#2}\Big\vert\,{#3}\!\biggr)$}}%
 {\bigl({#1\atop#2}\vert\mskip2mu#3\bigr)}%
 {}{}}  % used only in D and T styles
%\def\hypk_#1{\mathop{F{}}_{#1}\nolimits\hyper} % confl with mFn convention
\def\hypk_#1#2#3#4{\mathop{F{}}\mathchoice{\tightplus
  \hbox{$\displaystyle\biggl({#2\atop#3}\Big\vert\,{#4}\!\biggr)$}%
  \lower\fontdimen11\mathsym\hbox{$\scriptstyle\!#1$}}%
 {\bigl({#2\atop#3}\vert\mskip2mu#4\bigr)\lower\fontdimen12\mathsym
   \hbox{$\scriptstyle\!#1$}}%
 {}{}}  % used only in D and T styles
\def\double(#1\choose#2){\mathchoice{\biggl(\!\!{#1\choose#2}\!\!\biggr)}
 {\bigl(\!{#1\choose#2}\!\bigr)}{}{}} % only D and T styles
\def\hypstrut{\vphantom{_1\_^k}} % if there's another denominator with \_^k
\def\deg{\mathop{\rm deg}}
\def\Bscr{{\scr B}}
\def\Escr{{\scr E}}
\def\Fscr{{\scr F}}
\def\Pscr{{\scr P}}
\def\adj{\relbar\joinrel\relbar} % adjacent in a graph
\let\<=\langle \let \>=\rangle
\def\Pr{\mathop{\rm Pr}\nolimits}
\def\Mean{\mathop{\rm Mean}\nolimits}
\def\Var{\mathop{\rm Var}\nolimits}
\def\between{\big\vert\hbox{\vphantom)}} % \between_a^b
{\catcode`\'=\active \gdef'{^\bgroup\mskip2mu\prim@s}} % more space before '
\def\array#1[#2]{\hbox{\tt#1[$#2$]}}
\def\given{\mskip1mu\vert\mskip1mu}
\def\euler{\atopwithdelims<>}
\def\Euler#1#2{\mathchoice{\biggl<\mskip-7mu{#1\euler#2}\mskip-7mu\biggr>}%
 {\bigl<\!{#1\euler#2}\!\bigr>}{}{}}
\def\Choose#1#2{\mathchoice{\biggl(\mskip-7mu{#1\euler#2}\mskip-7mu\biggr)}%
 {\bigl(\!{#1\euler#2}\!\bigr)}{}{}}
 
\newbox\phihatbox \newbox\scrphihatbox
\setbox\phihatbox=\hbox{$\phi$} \ht\phihatbox=1ex
\setbox\scrphihatbox=\hbox{$\scriptstyle\phi$}
  \ht\scrphihatbox=\fontdimen5\mathsublet
\setbox\phihatbox=\hbox{$\widehat{\box\phihatbox}$}
\setbox\scrphihatbox=\hbox{$\hat{\box\scrphihatbox}$}
\def\phihat{\mathchoice{\copy\phihatbox}{\copy\phihatbox}%
 {\copy\scrphihatbox}{{\hat\phi}}}
 
\newbox\mathsizebox
\def\setmathsize#1{\global\setbox\mathsizebox=\hbox{\displaymath#1$}}
\def\mathsize#1{\hbox to\wd\mathsizebox{\displaymath#1$\hss}}
 
\newbox\sqrtstrutbox
\setbox\sqrtstrutbox=\hbox{\vrule height10.5pt width\z@}
\def\strutsqrt{\copy\sqrtstrutbox\sqrt}
 
\newbox\Sqbox % for sum of squares
\setbox\Sqbox=\vbox{\tenrm\hrule height.6pt\kern-.6pt
  \hbox to1.5ex{\vrule height1.5ex width.6pt\hss\vrule width.6pt}\kern-.6pt
  \hrule height.3pt depth.3pt}
\def\Sq{\mskip1.5mu\copy\Sqbox\mskip1.5mu}
 
\def\CMtext{% To switch back to Computer Modern text.
  \let\rm=\tenrm
  \let\it=\tenit
  \let\sl=\tensl
  \let\tt=\tentt
  \normalbaselineskip=12pt \normallineskip=1pt \normallineskiplimit=0pt 
  \setbox\strutbox=\hbox{\vrule height8.5pt depth3.5pt width0pt}%
  \normalbaselines\rm}

\catcode`@=12  
\endinput
