% \iffalse meta-comment
% 
% Copyright (C) 2015
% by Byron Cook, Tauba Auerbach, and David Reinfurt
%
% This work may be distributed and/or modified under the conditions of the LaTeX Project Public License, either version 1.3c of this license or (at your option) any later version. The latest version of this license is [here](http://www.latex-project.org/lppl.txt) and version 1.3c or later is part of all distributions of LaTeX version 2005/12/01 or later.
% 
% \fi
%
% \iffalse
%<style>\NeedsTeXFormat{LaTeX2e}
%<style>\ProvidesPackage{esrelation}
%<fd>\ProvidesFile{uesrelation.fd}
%<*driver>
\documentclass[a4paper]{ltxdoc}
\usepackage{esrelation}
\parindent 0 pt
\EnableCrossrefs
\CodelineIndex
\RecordChanges
\OnlyDescription
\begin{document}
\DocInput{esrelation.dtx}
\end{document}
%</driver>
% \fi
%\title{The \textsf{\textbf{esrelation}} Package}
%\author{Byron Cook, Tauba Auerbach, David Reinfurt}
%\date{v 0.$\overline{9}$ 30/04/2015}
%\maketitle
%\MakeShortVerb{\|}
%\section{Installation}
%The program termination problem, also known at the uniform halting problem, can be defined as: \emph{Using a finite amount of time: determine whether a given program will always finish running or could possibly execute forever.}\\
%
%The Metafont programming and \LaTeXe{} package writing and \TeX macro programming (\emph{especially the \TeX macro programming}) required to produce these symbols looked like it might, itself, never end. It took more than a year of work in fits and starts to understand how the jalopy of bits and pieces go together to make a font work with \LaTeX{}. The Comprehensive \LaTeXe{} Symbol List (http://www.ctan.org/tex-archive/info/symbols/comprehensive/) does not currently include this set, but on completion all of these files will be ready to upload in the correct formats for inclusion. These are implemented as a standard \TeX{} math symbol font, implemented with custom Metafont sources, rendered on-the-fly as needed by \LaTeXe{}. Also provided in this package is a PostScript Type~1 version of the font. Symbols are accessed through macros defined in this package.\\
%
%Installation involves copying the supplied files to their designated places within \LaTeX{}'s search path and updating \TeX{}'s databases.
%
%\begin{enumerate}
%\item
%First, you need to find the folder \texttt{texmf-local} (on Unix the default is \texttt{/usr/local/texlive/texmf-local}). To do that, run: 
%
%\texttt{kpsewhich --var-value TEXMFLOCAL}
%
%Subsequently, this directory will be referred to as \texttt{TEXMFLOCAL}.
%
%\item
%Run \LaTeX{} on \texttt{esrelation.ins}. 
%Copy the files into the following directories, creating subdirectories as necessary:
%
%\begin{itemize}
%\item copy \texttt{esrelation.sty} and \texttt{uesrelation.fd} to:\\
%\texttt{TEXMFLOCAL/tex/latex/esrelation}
%
%\item copy \texttt{esrelation.mf} and \texttt{esrelation10.mf} to:\\
%\texttt{TEXMFLOCAL/fonts/source/public/esrelation}
%\end{itemize}
%
%If you also want to install the fonts in Type1 format:
%\begin{itemize}
%\item copy \texttt{esrelation10.pfb} to:\\
%\texttt{TEXMFLOCAL/fonts/type1/public/esrelation}
%
%\item copy \texttt{esrelation.map} to:\\
%\texttt{TEXMFLOCAL/fonts/map/dvips/esrelation}
%
%\end{itemize}
%
%Note that all created directories should be set to mode \texttt{755} and all files should be set to mode \texttt{644}.
%
%
%\item
%Update your \LaTeX{} font database. This is called the ls-r and lives in a few places. Fortunately, you can just run this, likely as sudo or root (\texttt{-H} sets \texttt{HOME} for the sudo environment):
%
%\texttt{sudo -H mktexlsr}
%
%\item
%Update your \TeX{} font map by running the command:
%
%\texttt{sudo -H updmap-sys --enable Map=esrelation.map}
%
%\item
%Update the font database again:
%
%\texttt{sudo -H mktexlsr}
%
%\item
%Open \LaTeX{}, and start relating.
%\end{enumerate}
% 
% \section{Using esrelation}
%Load the package with \verb|\usepackage{esrelation}|. Available symbols to be used from math mode:\\
%
%\begin{tabular}{l l}
%& \\
%\verb+\relationrightproject+ & $\relationrightproject{A, Z}$\\
%&\\
%\verb+\relationleftproject+ & $\relationleftproject{A, Z}$\\
%&\\
%\verb+\relationlifting+ & $\relationlifting{A, Z}$\\
%&\\
%\verb+\restrictwand+ & $i_\restrictwand$\\
%&\\
%\verb+\restrictwandup+ & $i_\restrictwandup$\\
%&\\
%\verb+\restrictbarb+ & $R_\restrictbarb$\\
%&\\
%\verb+\restrictbarbup+ & $R_\restrictbarbup$\\
%&\\
%\verb+\restrictmallet+ & $Z_\restrictmallet$\\
%&\\
%\verb+\restrictmalletup+ & $Z_\restrictmalletup$\\
%&\\
%\end{tabular}
%
%\newpage
%\Large
%\parindent 0pt
%
%$\relationrightproject{R_A}$
%
%\vskip 2em
%$\relationrightproject{0, 1}$
%
%\vskip 2em
%$\relationleftproject{0, 1}$
%
%\vskip 2em
%$\relationlifting{0, 1}$
%
%\vskip 2em
%$\relationleftproject{\relationrightproject{\relationleftproject{\relationrightproject{1, 1}}}}$
%
%\vskip 2em
%$\relationlifting{x|x>1, x|x=0}$
%
%\vskip 2em
%$\relationlifting{\relationlifting{\relationlifting{\relationlifting{\relationlifting{x,X_\restrictwand}}}}}$
%
%\vskip 2em
%$\relationleftproject{\relationlifting{\relationlifting{\relationleftproject{\relationrightproject{\relationleftproject{\relationrightproject{i,R}}}}}}}$
%
%\vskip 2em
%$X_\restrictwand$
%$X_\restrictwand^2$
%$X_\restrictwand^\infty$
%
%\vskip 2em
%$X_\restrictbarb$
%
%\vskip 2em
%$X_\restrictmallet$
%
% \newpage
% \normalsize
% End. Try some more combinations now that it's running.
%
%\StopEventually{}
%    \begin{macrocode}
%<*fd>
\DeclareFontFamily{U}{esrelation}{}
\DeclareFontShape{U}{esrelation}{m}{n}{<->esrelation10}{}
%</fd>
%    \end{macrocode}
%    \begin{macrocode}
%<*style>
\DeclareSymbolFont{esrelation}{U}{esrelation}{m}{n}
\DeclareMathSymbol{\arrwr}{\mathord}{esrelation}{'022} % arrow_project_right
\DeclareMathSymbol{\arrwl}{\mathord}{esrelation}{'023} % arrow_project_left
\DeclareMathSymbol{\brktr}{\mathrel}{esrelation}{'025} % bracket_project_right
\DeclareMathSymbol{\brktl}{\mathrel}{esrelation}{'024} % bracket_project_left
\DeclareMathSymbol{\brktlift}{\mathrel}{esrelation}{'026} % bracket_lifting
\DeclareMathSymbol{\barshort}{\mathrel}{esrelation}{'040}
\DeclareMathSymbol{\barlong}{\mathrel}{esrelation}{'043}
\DeclareMathSymbol{\verticalbarshort}{\mathord}{esrelation}{'045}
\DeclareMathSymbol{\verticalbarlongleft}{\mathord}{esrelation}{'044}
\DeclareMathSymbol{\verticalbarlongright}{\mathord}{esrelation}{'046}
\DeclareMathSymbol{\restrictwand}{\mathord}{esrelation}{'027}
\DeclareMathSymbol{\restrictbarb}{\mathord}{esrelation}{'030}
\DeclareMathSymbol{\restrictmallet}{\mathord}{esrelation}{'021}
\DeclareMathSymbol{\restrictwandup}{\mathord}{esrelation}{'050}
\DeclareMathSymbol{\restrictbarbup}{\mathord}{esrelation}{'051}
\DeclareMathSymbol{\restrictmalletup}{\mathord}{esrelation}{'052}
%%----------------------------------------
%% 0. main
%%----------------------------------------

\ProcessOptions\relax

\def\relationrightproject{\parindent 0pt\mathpalette{\relationbuildprojectright\relationbarfill}}
\def\relationleftproject{\parindent 0pt\mathpalette{\relationbuildprojectleft\relationbarfill}}
\def\relationlifting{\parindent 0pt\mathpalette{\relationbuildlifting\relationbarfill}}
%%----------------------------------------
%% 1. fills
%%----------------------------------------

\def\relationbarfill#1{
\m@th\leaders\hbox{$\mkern-2mu\barlong\mkern-2mu$}\hfill
}

\def\relationverticalbarfillleft#1{
  \hbox to .5em{\vbox to #1{
  \leaders\hbox{\hbox{$\verticalbarlongleft$}}
  \vfill\kern-.5em$\verticalbarlongleft$}}
}

\def\relationverticalbarfillright#1{
  \hbox to .5em{\vbox to #1{
  \leaders\hbox{\hbox{$\verticalbarlongright$}}
  \vfill\kern-.5em$\verticalbarlongright$}}
}
%%----------------------------------------
%% 2. build
%%----------------------------------------

\def\relationbuildprojectright #1#2#3{
%% #1 = \relationbarfill
%% #2 = \mathchoice
%% #3 = \relationleftproject{...}
\setbox0=\hbox{$#3$} %% main expression
\dimen0=\ht0 %% main box height
\dimen1=\wd0 %% main box width
\vbox{
\ialign{##\crcr
\noalign{\kern-.3em\nointerlineskip} %% overline
\hbox to \dimen1{$\kern.1em\brktr$#1#2}$\mkern-3mu
\arrwr$\crcr
\noalign{\kern-.1em\nointerlineskip}$\m@th %% main
\kern.1em\relationverticalbarfillleft{\dimen0}\kern-.3em\box0 $\crcr
}
}
}

\def\relationbuildprojectleft #1#2#3{
%% #1 = \relationbarfill
%% #2 = \mathchoice
%% #3 = \relationleftproject{...}
\setbox0=\hbox{$#3$} %% main expression
\dimen0=\ht0 %% main box height
\dimen1=\wd0 %% main box width
\vbox{
\ialign{##\crcr
\noalign{\kern-.3em\nointerlineskip} %% overline
\hbox to \dimen1{$\mkern2mu\arrwl$#1#2}$\kern.1em\brktl$\crcr
\noalign{\kern-.1em\nointerlineskip}$\m@th %% main
\mkern3mu\box0\mkern-3mu\kern.1em\relationverticalbarfillright{
\dimen0}$\crcr
}
}
}

\def\relationbuildlifting #1#2#3{
%% #1 = \relationbarfill
%% #2 = \mathchoice
%% #3 = \relationbuildlifting{...}
\setbox0=\hbox{$#3$} %% main expression
\dimen0=\ht0 %% main box height
\dimen1=\wd0 %% main box width
\advance\dimen1 by -.25em %% close horizontal gap
\lower.75ex\hbox{\vbox{
\ialign{##\crcr
\noalign{\kern0em\nointerlineskip}$\m@th %% main
\kern.1em\relationverticalbarfillleft{\dimen0}\mkern-5mu
\box0 $\crcr
\noalign{\kern-.2em\nointerlineskip} %% underline
\hbox to \dimen1{$\kern.1em\brktlift$#1#2}$\mkern-3mu\barlong
\barlong$\crcr
}
}
}\kern-.25em
}

%</style>
%    \end{macrocode}
%    \begin{macrocode}
%<*mf>

%% mf setup

font_coding_scheme:="TeX math symbols";
mode_setup; font_setup;

autorounding:=0;
font_slant slant; font_x_height x_height#;
font_quad 18u# if not monospace:+4letter_fit# fi;
slant:=mono_charic#:=0;  % the remaining characters will not be slanted
currenttransform:=identity yscaled aspect_ratio scaled granularity;


%% identify symbols

%% brackets

bracket_project_right=oct"025";
bracket_project_left=oct"024";
bracket_lifting=oct"026";

%% symbols

restrict_wand=oct"027";
restrict_barb=oct"030";
restrict_mallet=oct"021";
restrict_wand_up=oct"050";
restrict_barb_up=oct"051";
restrict_mallet_up=oct"052";


%% arrows

r_arrow22=oct"021";

arrow_project_right=oct"022";
arrow_project_left=oct"023";

%% bars

barshort=oct"040";
barlong=oct"043";
verticalbarlongleft=oct"044";
verticalbarlongright=oct"046";
verticalbarshort=oct"045";

%% declare extensible 

extensible oct"025": oct"025",0,0,oct"044";
extensible oct"024": oct"024",0,0,oct"044";  



%% define pixels

define_pixels(em, cap, sb, penscaler);   	% Convert to device-specific units.
define_corrected_pixels(o);		% Same, but add a device-specific fudge factor. 


%% relation utility dims

%% u = (w-(2*sb))/8;			% utility measurement
uu = (h-(2*sb))/8;			% utility measurement (using h, not w)
super = 3.9;				% offset utility for curve roundness [2.8]


%% Arrow project Right

iff known arrow_project_right: cmchar "arrow_project_right";
compute_spread(.45x_height#,.55x_height#);
beginchar(arrow_project_right,10u#,cap#, 1pt#);
  
  adjust_fit(0,0);
  pickup pencircle scaled (penscaler);   % small, circular tip

  %% Points

  z1 = (-5u, math_axis);
  z2 = (10u, y1);
  z3 = (x2-5u, y2+5u);
  
  %% Draw

  draw z1 -- z2 -- z3;   	% right arrow
  penlabels(1,2,3,4,5,6); 

endchar;


%% Arrow project Left

iff known arrow_project_left: cmchar "arrow_project_left";
compute_spread(.45x_height#,.55x_height#);
beginchar(arrow_project_left,10u#,cap#, 1pt#);
  
  adjust_fit(0,0);
  pickup pencircle scaled (penscaler);   % small, circular tip

  %% Points

  z1 = (15u, math_axis);
  z2 = (0, y1);
  z3 = (x2+5u, y2+5u);
  
  %% Draw

  draw z1 -- z2 -- z3;   	% right arrow
  penlabels(1,2,3,4,5,6); 

endchar;


%% Bracket project Right

iff known bracket_project_right: cmchar "bracket_project_right";
compute_spread(.45x_height#,.55x_height#);
beginchar(bracket_project_right,5u#,cap#, 1pt#);
  
  adjust_fit(0,0);
  pickup pencircle scaled (penscaler);   % small, circular tip

  %% Points

  z1 = (0, -3*desc_depth);
  z2 = (x1, math_axis-4u);
  z3 = (x1+5u/super, y4-5u/super);
  z4 = (x1+4u, math_axis);
  z5 = (15u, y4);
  
  %% Draw

  draw z1 -- z2 .. z3 .. z4 -- z5;   	% right bracket
  penlabels(1,2,3,4,5,6); 

endchar;


%% Bracket project Left

iff known bracket_project_left: cmchar "bracket_project_left";
compute_spread(.45x_height#,.55x_height#);
beginchar(bracket_project_left,5u#,cap#, 1pt#);
  
  adjust_fit(0,0);
  pickup pencircle scaled (penscaler);   % small, circular tip

  %% Points

  z1 = (w, -3*desc_depth);
  z2 = (x1, math_axis-4u);
  z3 = (x1-5u/super, y4-5u/super);
  z4 = (x1-4u, math_axis);
  z5 = (-10u, y4);
    
  %% Draw

  draw z1 -- z2 .. z3 .. z4 -- z5;   	% right bracket
  penlabels(1,2,3,4,5,6); 

endchar;


%% Bracket Lifting

iff known bracket_lifting: cmchar "bracket_lifting";
compute_spread(.45x_height#,.55x_height#);
beginchar(bracket_lifting,5u#,cap#, 1pt#);
  
  adjust_fit(0,0);
  pickup pencircle scaled (penscaler);   % small, circular tip

  %% Points

  z1 = (0, h+10u);
  z2 = (x1, math_axis+4u);
  z3 = (x1+5u/super, y4+5u/super);
  z4 = (4u, math_axis);
  z5 = (w+10u, y4);
  
  %% Draw

  draw z1 -- z2 .. z3 .. z4 -- z5;   	% bracket
  penlabels(1,2,3,4,5,6); 

endchar;


% Bar Short

iff known barshort: cmchar "barshort";
compute_spread(.45x_height#,.55x_height#);
beginchar(barshort,3u#,v_center(spread#+rule_thickness#));

	adjust_fit(0,0); 
	% pickup rule.nib;
	pickup pencircle scaled (penscaler);   % small, circular tip  
	x1=eps;
	x2=w-eps+1u;
	y1=y2=math_axis;
	draw z1--z2;
	penlabels(1,2);
	
endchar;


%% Bar Long

iff known barlong: cmchar "barlong";
compute_spread(.45x_height#,.55x_height#);
beginchar(barlong,6u#,v_center(spread#+rule_thickness#));

	adjust_fit(0,0); 
	% pickup rule.nib;
	pickup pencircle scaled (penscaler);   % small, circular tip
	x1=eps;
	x2=w-eps+1u;
	y1=y2=math_axis;
	draw z1--z2;
	penlabels(1,2);
	
endchar;


%% Vertical Bar Long Left

iff known verticalbarlongleft: cmchar "verticalbarlongleft";
compute_spread(.45x_height#,.55x_height#);
beginchar(verticalbarlongleft,5u#,v_center(spread#+rule_thickness#));

	adjust_fit(0,0); 
	pickup pencircle scaled (penscaler);   % small, circular tip
	x1=x2=0;
	y1=asc_height-5u;
	y2=0;
	draw z1--z2;
	penlabels(1,2);
	
endchar;


%% Vertical Bar Long Right

iff known verticalbarlongright: cmchar "verticalbarlongright";
compute_spread(.45x_height#,.55x_height#);
beginchar(verticalbarlongright,5u#,v_center(spread#+rule_thickness#));

	adjust_fit(0,0); 
	pickup pencircle scaled (penscaler);   % small, circular tip
	x1=x2=w;
	y1=asc_height-5u;
	y2=0;
	draw z1--z2;
	penlabels(1,2);
	
endchar;


%% Vertical Bar Short

iff known verticalbarshort: cmchar "verticalbarshort";
compute_spread(.45x_height#,.55x_height#);
beginchar(verticalbarshort,5u#,v_center(spread#+rule_thickness#));

	adjust_fit(0,0); 
	pickup pencircle scaled (penscaler);   % small, circular tip
	x1=x2=0;
	y1=1u;
	y2=0;
	draw z1--z2;
	penlabels(1,2);
	
endchar;


%% restrict Wand

iff known restrict_wand: cmchar "restrict_wand";
compute_spread(.45x_height#,.55x_height#);
beginchar(restrict_wand,5u#,v_center(spread#+rule_thickness#));

  pickup pencircle scaled (penscaler);   
  
  %% Points

  z1 = (3u, asc_height);             	% bar
  z2 = (x1, -2*u);

  z3 = (x1-2*u, 0);			  			% asterisk
  z4 = (x1+2*u, y3);
  z5 = (x1-1.4*u, y3+1.4*u);
  z6 = (x1+1.4*u, y3-1.4*u);
  z7 = (x6, y5);
  z8 = (x5, y6);

  %% Draw

  draw z1 -- z2;			  % |
  draw z3 -- z4;			  % *
  draw z5 -- z6;
  draw z7 -- z8;

	penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);

endchar;


%% restrict Wand Up

iff known restrict_wand_up: cmchar "restrict_wand_up";
compute_spread(.45x_height#,.55x_height#);
beginchar(restrict_wand_up,5u#,v_center(spread#+rule_thickness#));

  pickup pencircle scaled (penscaler);   
  
  %% Points

  z1 = (3u, -2u);             	% bar
  z2 = (x1, asc_height);

  z3 = (x1-2*u, y2-2u);			  			% asterisk
  z4 = (x1+2*u, y3);
  z5 = (x1-1.4*u, y3+1.4*u);
  z6 = (x1+1.4*u, y3-1.4*u);
  z7 = (x6, y5);
  z8 = (x5, y6);

  %% Draw

  draw z1 -- z2;			  % |
  draw z3 -- z4;			  % *
  draw z5 -- z6;
  draw z7 -- z8;

	penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);

endchar;


%% restrict Barb

iff known restrict_barb: cmchar "restrict_barb";
compute_spread(.45x_height#,.55x_height#);
beginchar(restrict_barb,5u#,v_center(spread#+rule_thickness#));

  pickup pencircle scaled (penscaler);   % Use a pen with a small, circular tip.

  %% Points

  z1 = (3u, asc_height);          	      % bar
  z2 = (x1, -2*u);

  z3 = (x1-2*u, 0);                     % diamond
  z4 = (x1+2*u, y3);
  z5 = (x1, 2*u);

  %% Draw

  draw z1 -- z2;                          % |
  draw z3 -- z4 -- z5;                    % _\
  draw z2 -- z3;                          % \

  penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);

endchar;


%% restrict Barb Up

iff known restrict_barb_up: cmchar "restrict_barb_up";
compute_spread(.45x_height#,.55x_height#);
beginchar(restrict_barb_up,5u#,v_center(spread#+rule_thickness#));

  pickup pencircle scaled (penscaler);   % Use a pen with a small, circular tip.

  %% Points

  z1 = (3u, -2u);          	      % bar
  z2 = (x1, asc_height);

  z3 = (x1-2*u, y2-2u);                     % diamond
  z4 = (x1+2*u, y3);
  z5 = (x1, y3-2u);

  %% Draw

  draw z1 -- z2;                          % |
  draw z3 -- z4 -- z5;                    % _\
  draw z2 -- z3;                          % \

  penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);

endchar;


%% restrict Mallet

iff known restrict_mallet: cmchar "restrict_mallet";
compute_spread(.45x_height#,.55x_height#);
beginchar(restrict_mallet,5u#,v_center(spread#+rule_thickness#));
 
  pickup pencircle scaled (penscaler);   % Use a pen with a small, circular tip.

  %% Points

  z1 = (3u, asc_height);          	      % bar
  z2 = (x1, -2*u);

  z3 = (x1-(4/3)*u, (-2/3)*u);                     % diamond
  z4 = (x1+(4/3)*u, y3);
  z5 = (x1, (2/3)*u);

  %% Draw

  draw z1 -- z2;                          % |
  draw z3 .. z5 .. z4 .. z2 .. z3;        % o

  penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);

endchar;



%% restrict Mallet up

iff known restrict_mallet_up: cmchar "restrict_mallet_up";
compute_spread(.45x_height#,.55x_height#);
beginchar(restrict_mallet_up,5u#,v_center(spread#+rule_thickness#));
 
  pickup pencircle scaled (penscaler);   % Use a pen with a small, circular tip.

  %% Points

  z1 = (3u, -2u);          	      % bar
  z2 = (x1, asc_height);

  z3 = (x1-(4/3)*u, y2-4/3u);                     % diamond
  z4 = (x1+(4/3)*u, y3);
  z5 = (x1, y3-4/3u);

  %% Draw

  draw z1 -- z2;                          % |
  draw z3 .. z5 .. z4 .. z2 .. z3;        % o

  penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);

endchar;



bye.

%</mf>
%    \end{macrocode}
%    \begin{macrocode}
%<*mf10>
if unknown cmbase: input cmbase fi

font_identifier:="VECT"; 
font_size 10pt#;

%% relation specific measures

em# := 10pt#;				% ``M'' width
cap# := 7pt#;				% cap height
sb# := 1/4pt#;				% sidebearing
o# := 1/16pt#;				% amt curves overshoot borders
penscaler# := 0.3pt#;	 	% pen stroke scaler ** fix **

%% relation non-sharped values * fix *

%% u = (w-(2*sb))/8;			% utility measurement
%% super = 3.9;				% offset utility for curve roundness [2.8]
  
%% cm values from esvect

u#:=20/36pt#;      % unit width
width_adj#:=0pt#;    % width adjustment for certain characters
serif_fit#:=0pt#;    % extra sidebar near lowercase serifs
cap_serif_fit#:=5/36pt#;  % extra sidebar near uppercase serifs
letter_fit#:=0pt#;    % extra space added to all sidebars

body_height#:=270/36pt#;  % height of tallest characters
asc_height#:=250/36pt#;    % height of lowercase ascenders
cap_height#:=246/36pt#;    % height of caps
fig_height#:=232/36pt#;    % height of numerals
x_height#:=155/36pt#;    % height of lowercase without ascenders
math_axis#:=90/36pt#;    % axis of symmetry for math symbols
bar_height#:=87/36pt#;    % height of crossbar in lowercase e
comma_depth#:=70/36pt#;    % depth of comma below baseline
desc_depth#:=70/36pt#;    % depth of lowercase descenders

crisp#:=8/36pt#;    % diameter of serif corners
tiny#:=8/36pt#;      % diameter of rounded corners
fine#:=7/36pt#;      % diameter of sharply rounded corners
thin_join#:=7/36pt#;    % width of extrafine details
hair#:=9/36pt#;      % lowercase hairline breadth
stem#:=24/36pt#;    % lowercase stem breadth
curve#:=29/36pt#;    % lowercase curve breadth
ess#:=27/36pt#;      % breadth in middle of lowercase s
flare#:=32/36pt#;    % diameter of bulbs or breadth of terminals
dot_size#:=38/36pt#;    % diameter of dots
cap_hair#:=11/36pt#;    % uppercase hairline breadth
cap_stem#:=30/36pt#;    % uppercase stem breadth
cap_curve#:=35/36pt#;    % uppercase curve breadth
cap_ess#:=33/36pt#;    % breadth in middle of uppercase s
rule_thickness#:=.4pt#;    % thickness of lines in math symbols

dish#:=1/36pt#;      % amount erased at top or bottom of serifs
bracket#:=20/36pt#;    % vertical distance from serif base to tangent
jut#:=30/36pt#;      % protrusion of lowercase serifs
cap_jut#:=37/36pt#;    % protrusion of uppercase serifs
beak_jut#:=10/36pt#;    % horizontal protrusion of beak serifs
beak#:=70/36pt#;    % vertical protrusion of beak serifs
vair#:=8/36pt#;      % vertical diameter of hairlines
notch_cut#:=10pt#;    % maximum breadth above or below notches
bar#:=11/36pt#;      % lowercase bar thickness
slab#:=11/36pt#;    % serif and arm thickness
cap_bar#:=11/36pt#;    % uppercase bar thickness
cap_band#:=11/36pt#;    % uppercase thickness above/below lobes
cap_notch_cut#:=10pt#;    % max breadth above/below uppercase notches
serif_drop#:=4/36pt#;    % vertical drop of sloped serifs
stem_corr#:=1/36pt#;    % for small refinements of stem breadth
vair_corr#:=1/36pt#;    % for small refinements of hairline height
apex_corr#:=0pt#;    % extra width at diagonal junctions

%% o#:=8/36pt#;      % amount of overshoot for curves
apex_o#:=8/36pt#;    % amount of overshoot for diagonal junctions

slant:=.25;      % tilt ratio $(\Delta x/\Delta y)$
fudge:=1;      % factor applied to weights of heavy characters
math_spread:=0;      % extra openness of math symbols
superness:=1/sqrt2;    % parameter for superellipses
superpull:=1/6;      % extra openness inside bowls
beak_darkness:=11/30;    % fraction of triangle inside beak serifs
ligs:=2;      % level of ligatures to be included

square_dots:=false;    % should dots be square?
hefty:=false;      % should we try hard not to be overweight?
serifs:=true;      % should serifs and bulbs be attached?
monospace:=false;    % should all characters have the same width?
variant_g:=true;    % should an italic-style g be used?
low_asterisk:=false;    % should the asterisk be centered at the axis?
math_fitting:=true;    % should math-mode spacing be used?

subs:=7/10;  % subscripts to 10pt will normally be in 7pt type
rth#:=.4pt#;  % assume that rules will come from cmex10
fontdimen 8:  % parameters $\sigma_8$ through $\sigma_{22}$ will now be listed
 math_axis#+3.51rth#+54/36pt#+subs*desc_depth#,      % num1
 math_axis#+1.51rth#+30/36pt#,          % num2
 math_axis#+1.51rth#+48/36pt#,          % num3
 -(math_axis#-3.51rth#-subs*fig_height#-124/36pt#),    % denom1
 -(math_axis#-1.51rth#-subs*fig_height#-30/36pt#),    % denom2
 8.99pt#-subs*asc_height#,          % sup1
 8.49pt#-subs*asc_height#,          % sup2
 104/36pt#,              % sup3
 54/36pt#,              % sub1
 -(8.49pt#-2subs*asc_height#-3.1rth#),        % sub2
 subs*asc_height#-36/36pt#,          % sup\_drop
 18/36pt#,              % sub\_drop
 23.9pt#,              % delim1
 10.1pt#,              % delim2
 math_axis#;              % axis\_height

generate esrelation      % switch to the driver file

%</mf10>
%    \end{macrocode}
% \Finale