summaryrefslogtreecommitdiff
path: root/fonts/esrelation
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /fonts/esrelation
Initial commit
Diffstat (limited to 'fonts/esrelation')
-rw-r--r--fonts/esrelation/README58
-rw-r--r--fonts/esrelation/README.md58
-rw-r--r--fonts/esrelation/esrelation.dtx845
-rw-r--r--fonts/esrelation/esrelation.ins21
-rw-r--r--fonts/esrelation/esrelation.map1
-rw-r--r--fonts/esrelation/esrelation.pdfbin0 -> 157085 bytes
-rw-r--r--fonts/esrelation/esrelation10.pfbbin0 -> 28168 bytes
7 files changed, 983 insertions, 0 deletions
diff --git a/fonts/esrelation/README b/fonts/esrelation/README
new file mode 100644
index 0000000000..172e53bc24
--- /dev/null
+++ b/fonts/esrelation/README
@@ -0,0 +1,58 @@
+The ESRELATION package
+======================
+by Byron Cook, Tauba Auerbach, David Reinfurt
+
+About
+-----
+
+The program termination problem, also known at the uniform halting problem, can be defined as: *Using a finite amount of time: determine whether a given program will always finish running or could possibly execute forever.*
+
+The Metafont programming and LaTeX package writing and TeX macro programming (*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/ "CTAN") 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 LaTeX. Also provided in this package is a PostScript Type-1 version of the font. Symbols are accessed through macros defined in this package.
+
+Installation
+------------
+
++ run latex on esrelation.ins to generate sty, mf, fd files
+ > $ latex esrelation.ins
+
++ run latex (or pdflatex) on esrelation.dtx to generate documentation (including detailed installation instructions)
+ > $ pdflatex esrelation.dtx
+
++ determine the location of your local TeX tree by running
+ > $ kpsewhich --var-val TEXMFLOCAL
+
+ (this value will henceforth be referred to as &lsquo;TEXMFLOCAL&rsquo;)
+
++ install esrelation.sty and uesrelation.fd in
+ > TEXMFLOCAL/tex/latex/esrelation
+
++ install esrelation.mf and esrelation10.mf in
+ > TEXMFLOCAL/fonts/source/public/esrelation
+
++ install esrelation10.pfb in
+ > TEXMFLOCAL/fonts/type1/public/esrelation
+
++ install esrelation.map in
+ > TEXMFLOCAL/fonts/map/dvips/esrelation
+
+**NB**: all created directories should be set to mode 755 and all of the above files should be set to mode 644.
+
++ update LaTeX font database
+ > $ sudo -H mktexlsr
+
++ update TeX font map
+ > $ sudo -H updmap-sys --enable Map=esrelation.map
+
++ udpate the font database again
+ > $ sudo -H mktexlsr
+
+Resources
+---------
+
+Up-to-date source code is hosted on [GitHub](https://github.com/reinfurt/ESRELATION).
+
+More information about installing TeX fonts can be found [here](https://www.tug.org/fonts/fontinstall.html).
+
+License
+-------
+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. \ No newline at end of file
diff --git a/fonts/esrelation/README.md b/fonts/esrelation/README.md
new file mode 100644
index 0000000000..172e53bc24
--- /dev/null
+++ b/fonts/esrelation/README.md
@@ -0,0 +1,58 @@
+The ESRELATION package
+======================
+by Byron Cook, Tauba Auerbach, David Reinfurt
+
+About
+-----
+
+The program termination problem, also known at the uniform halting problem, can be defined as: *Using a finite amount of time: determine whether a given program will always finish running or could possibly execute forever.*
+
+The Metafont programming and LaTeX package writing and TeX macro programming (*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/ "CTAN") 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 LaTeX. Also provided in this package is a PostScript Type-1 version of the font. Symbols are accessed through macros defined in this package.
+
+Installation
+------------
+
++ run latex on esrelation.ins to generate sty, mf, fd files
+ > $ latex esrelation.ins
+
++ run latex (or pdflatex) on esrelation.dtx to generate documentation (including detailed installation instructions)
+ > $ pdflatex esrelation.dtx
+
++ determine the location of your local TeX tree by running
+ > $ kpsewhich --var-val TEXMFLOCAL
+
+ (this value will henceforth be referred to as &lsquo;TEXMFLOCAL&rsquo;)
+
++ install esrelation.sty and uesrelation.fd in
+ > TEXMFLOCAL/tex/latex/esrelation
+
++ install esrelation.mf and esrelation10.mf in
+ > TEXMFLOCAL/fonts/source/public/esrelation
+
++ install esrelation10.pfb in
+ > TEXMFLOCAL/fonts/type1/public/esrelation
+
++ install esrelation.map in
+ > TEXMFLOCAL/fonts/map/dvips/esrelation
+
+**NB**: all created directories should be set to mode 755 and all of the above files should be set to mode 644.
+
++ update LaTeX font database
+ > $ sudo -H mktexlsr
+
++ update TeX font map
+ > $ sudo -H updmap-sys --enable Map=esrelation.map
+
++ udpate the font database again
+ > $ sudo -H mktexlsr
+
+Resources
+---------
+
+Up-to-date source code is hosted on [GitHub](https://github.com/reinfurt/ESRELATION).
+
+More information about installing TeX fonts can be found [here](https://www.tug.org/fonts/fontinstall.html).
+
+License
+-------
+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. \ No newline at end of file
diff --git a/fonts/esrelation/esrelation.dtx b/fonts/esrelation/esrelation.dtx
new file mode 100644
index 0000000000..5005e6669d
--- /dev/null
+++ b/fonts/esrelation/esrelation.dtx
@@ -0,0 +1,845 @@
+% \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 \ No newline at end of file
diff --git a/fonts/esrelation/esrelation.ins b/fonts/esrelation/esrelation.ins
new file mode 100644
index 0000000000..6f278a0058
--- /dev/null
+++ b/fonts/esrelation/esrelation.ins
@@ -0,0 +1,21 @@
+%% filename: esrelation.ins
+%% version: 1.0
+%% date: 2015/04/30
+%%
+%% ------------------------------------------------------
+
+\input docstrip.tex
+\keepsilent
+\preamble
+
+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.
+
+\endpreamble
+\generate{\file{esrelation.sty}{\from{esrelation.dtx}{style}}}
+\generate{\file{uesrelation.fd}{\from{esrelation.dtx}{fd}}}
+\generate{\file{esrelation.mf}{\from{esrelation.dtx}{mf}}}
+\generate{\file{esrelation10.mf}{\from{esrelation.dtx}{mf10}}}
+\endbatchfile
diff --git a/fonts/esrelation/esrelation.map b/fonts/esrelation/esrelation.map
new file mode 100644
index 0000000000..33c3cc0a0c
--- /dev/null
+++ b/fonts/esrelation/esrelation.map
@@ -0,0 +1 @@
+esrelation10 esrelation10 <esrelation10.pfb
diff --git a/fonts/esrelation/esrelation.pdf b/fonts/esrelation/esrelation.pdf
new file mode 100644
index 0000000000..16882da4a3
--- /dev/null
+++ b/fonts/esrelation/esrelation.pdf
Binary files differ
diff --git a/fonts/esrelation/esrelation10.pfb b/fonts/esrelation/esrelation10.pfb
new file mode 100644
index 0000000000..1c5b3da1bf
--- /dev/null
+++ b/fonts/esrelation/esrelation10.pfb
Binary files differ