summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/aspectratio
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 /macros/latex/contrib/aspectratio
Initial commit
Diffstat (limited to 'macros/latex/contrib/aspectratio')
-rw-r--r--macros/latex/contrib/aspectratio/amarbi.pfbbin0 -> 3136 bytes
-rw-r--r--macros/latex/contrib/aspectratio/amarbi.tfmbin0 -> 144 bytes
-rw-r--r--macros/latex/contrib/aspectratio/amarri.pfbbin0 -> 3138 bytes
-rw-r--r--macros/latex/contrib/aspectratio/amarri.tfmbin0 -> 412 bytes
-rw-r--r--macros/latex/contrib/aspectratio/aparbi.tfmbin0 -> 156 bytes
-rw-r--r--macros/latex/contrib/aspectratio/aparri.tfmbin0 -> 156 bytes
-rw-r--r--macros/latex/contrib/aspectratio/ar.pdfbin0 -> 336772 bytes
-rw-r--r--macros/latex/contrib/aspectratio/ar.sty109
-rw-r--r--macros/latex/contrib/aspectratio/ar.tex162
-rw-r--r--macros/latex/contrib/aspectratio/ar10.mf142
-rw-r--r--macros/latex/contrib/aspectratio/ar10.pfbbin0 -> 8219 bytes
-rw-r--r--macros/latex/contrib/aspectratio/ar10.tfmbin0 -> 156 bytes
-rw-r--r--macros/latex/contrib/aspectratio/ar12.mf143
-rw-r--r--macros/latex/contrib/aspectratio/ar12.pfbbin0 -> 3237 bytes
-rw-r--r--macros/latex/contrib/aspectratio/ar12.tfmbin0 -> 156 bytes
-rw-r--r--macros/latex/contrib/aspectratio/ar5.pfbbin0 -> 3244 bytes
-rw-r--r--macros/latex/contrib/aspectratio/ar5.tfmbin0 -> 156 bytes
-rw-r--r--macros/latex/contrib/aspectratio/ar6.mf144
-rw-r--r--macros/latex/contrib/aspectratio/ar6.pfbbin0 -> 3303 bytes
-rw-r--r--macros/latex/contrib/aspectratio/ar6.tfmbin0 -> 156 bytes
-rw-r--r--macros/latex/contrib/aspectratio/ar7.mf145
-rw-r--r--macros/latex/contrib/aspectratio/ar7.pfbbin0 -> 3225 bytes
-rw-r--r--macros/latex/contrib/aspectratio/ar7.tfmbin0 -> 156 bytes
-rw-r--r--macros/latex/contrib/aspectratio/ar8.mf143
-rw-r--r--macros/latex/contrib/aspectratio/ar8.pfbbin0 -> 3321 bytes
-rw-r--r--macros/latex/contrib/aspectratio/ar8.tfmbin0 -> 156 bytes
-rw-r--r--macros/latex/contrib/aspectratio/ar9.mf144
-rw-r--r--macros/latex/contrib/aspectratio/ar9.pfbbin0 -> 3346 bytes
-rw-r--r--macros/latex/contrib/aspectratio/ar9.tfmbin0 -> 156 bytes
-rw-r--r--macros/latex/contrib/aspectratio/arb10.mf142
-rw-r--r--macros/latex/contrib/aspectratio/arb10.pfbbin0 -> 3312 bytes
-rw-r--r--macros/latex/contrib/aspectratio/arb10.tfmbin0 -> 156 bytes
-rw-r--r--macros/latex/contrib/aspectratio/arb12.mf143
-rw-r--r--macros/latex/contrib/aspectratio/arb12.pfbbin0 -> 8079 bytes
-rw-r--r--macros/latex/contrib/aspectratio/arb12.tfmbin0 -> 156 bytes
-rw-r--r--macros/latex/contrib/aspectratio/arb5.mf145
-rw-r--r--macros/latex/contrib/aspectratio/arb5.pfbbin0 -> 3225 bytes
-rw-r--r--macros/latex/contrib/aspectratio/arb5.tfmbin0 -> 152 bytes
-rw-r--r--macros/latex/contrib/aspectratio/arb6.mf144
-rw-r--r--macros/latex/contrib/aspectratio/arb6.pfbbin0 -> 8164 bytes
-rw-r--r--macros/latex/contrib/aspectratio/arb6.tfmbin0 -> 152 bytes
-rw-r--r--macros/latex/contrib/aspectratio/arb7.mf145
-rw-r--r--macros/latex/contrib/aspectratio/arb7.pfbbin0 -> 8141 bytes
-rw-r--r--macros/latex/contrib/aspectratio/arb7.tfmbin0 -> 156 bytes
-rw-r--r--macros/latex/contrib/aspectratio/arb8.mf143
-rw-r--r--macros/latex/contrib/aspectratio/arb8.pfbbin0 -> 8157 bytes
-rw-r--r--macros/latex/contrib/aspectratio/arb8.tfmbin0 -> 156 bytes
-rw-r--r--macros/latex/contrib/aspectratio/arb9.mf144
-rw-r--r--macros/latex/contrib/aspectratio/arb9.pfbbin0 -> 3383 bytes
-rw-r--r--macros/latex/contrib/aspectratio/arb9.tfmbin0 -> 156 bytes
-rw-r--r--macros/latex/contrib/aspectratio/arssbi10.mf142
-rw-r--r--macros/latex/contrib/aspectratio/arssbi10.pfbbin0 -> 3134 bytes
-rw-r--r--macros/latex/contrib/aspectratio/arssbi10.tfmbin0 -> 148 bytes
-rw-r--r--macros/latex/contrib/aspectratio/arssi10.mf142
-rw-r--r--macros/latex/contrib/aspectratio/arssi10.pfbbin0 -> 7895 bytes
-rw-r--r--macros/latex/contrib/aspectratio/arssi10.tfmbin0 -> 144 bytes
-rw-r--r--macros/latex/contrib/aspectratio/artti10.mf142
-rw-r--r--macros/latex/contrib/aspectratio/artti10.pfbbin0 -> 3146 bytes
-rw-r--r--macros/latex/contrib/aspectratio/artti10.tfmbin0 -> 148 bytes
-rw-r--r--macros/latex/contrib/aspectratio/aspectratio.map22
60 files changed, 2586 insertions, 0 deletions
diff --git a/macros/latex/contrib/aspectratio/amarbi.pfb b/macros/latex/contrib/aspectratio/amarbi.pfb
new file mode 100644
index 0000000000..8b223a1b96
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/amarbi.pfb
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/amarbi.tfm b/macros/latex/contrib/aspectratio/amarbi.tfm
new file mode 100644
index 0000000000..fd86eec237
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/amarbi.tfm
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/amarri.pfb b/macros/latex/contrib/aspectratio/amarri.pfb
new file mode 100644
index 0000000000..b4f8d75677
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/amarri.pfb
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/amarri.tfm b/macros/latex/contrib/aspectratio/amarri.tfm
new file mode 100644
index 0000000000..211cab9d65
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/amarri.tfm
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/aparbi.tfm b/macros/latex/contrib/aspectratio/aparbi.tfm
new file mode 100644
index 0000000000..d321f94fc8
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/aparbi.tfm
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/aparri.tfm b/macros/latex/contrib/aspectratio/aparri.tfm
new file mode 100644
index 0000000000..a539da720b
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/aparri.tfm
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/ar.pdf b/macros/latex/contrib/aspectratio/ar.pdf
new file mode 100644
index 0000000000..2431cbc43c
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/ar.pdf
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/ar.sty b/macros/latex/contrib/aspectratio/ar.sty
new file mode 100644
index 0000000000..a761b02b96
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/ar.sty
@@ -0,0 +1,109 @@
+% Copyright 2008-2012 Claudio Beccari
+% Licence LPPL
+%
+% This extension is for using the aspect ratio symbol in math mode and in
+% text mode by means of the command \AR.
+%
+%
+\NeedsTeXFormat{LaTeX2e}[1994/12/01]
+\ProvidesPackage{ar}[2012/01/23 v.2.0 Aspect Ratio symbol: CM, TX, PX styles]
+\newif\ifCM\newif\ifTM\newif\ifPA
+\CMfalse\TMfalse\PAfalse
+\DeclareOption{CM}{\CMtrue\TMfalse\PAfalse}
+\DeclareOption{TM}{\TMtrue\PAfalse\CMfalse}
+\DeclareOption{TX}{\TMtrue\PAfalse\CMfalse}
+\DeclareOption{PA}{\PAtrue\CMfalse\TMfalse}
+\DeclareOption{PX}{\PAtrue\CMfalse\TMfalse}
+\ExecuteOptions{CM}
+\ProcessOptions*\relax
+\ifCM
+ \DeclareFontFamily{U}{ar}{}
+ \DeclareFontShape{U}{ar}{m}{it}%
+ {<5><6><7><8><9>gen*ar%
+ <10-12>ar10%
+ <12-> ar12%
+ }{}
+ \DeclareFontShape{U}{ar}{b}{it}%
+ {<5><6><7><8><9>gen*arb%
+ <10-12>arb10%
+ <12-> arb12%
+ }{}
+ \DeclareFontShape{U}{ar}{bx}{it}{<->ssub*ar/b/it}{}
+ \DeclareFontShape{U}{ar}{m}{n}{<->ssub*ar/m/it}{}
+ \DeclareFontShape{U}{ar}{bx}{n}{<->ssub*ar/b/it}{}
+
+\DeclareFontFamily{U}{ARss}{}
+ \DeclareFontShape{U}{ARss}{m}{it}{<-> arssi10}{}%
+ \DeclareFontShape{U}{ARss}{m}{n}{<->ssub*ARss/m/it}{}%
+ \DeclareFontShape{U}{ARss}{m}{sl}{<->ssub*ARss/m/it}{}%
+ \DeclareFontShape{U}{ARss}{b}{it}{<-> arssbi10}{}%
+ \DeclareFontShape{U}{ARss}{b}{sl}{<->ssub*ARss/b/it}{}%
+ \DeclareFontShape{U}{ARss}{b}{n}{<->ssub*ARss/b/it}{}%
+ \DeclareFontShape{U}{ARss}{bx}{sl}{<->ssub*ARss/b/it}{}%
+ \DeclareFontShape{U}{ARss}{bx}{it}{<->ssub*ARss/b/it}{}%
+ \DeclareFontShape{U}{ARss}{bx}{n}{<->ssub*ARss/b/it}{}%
+
+\DeclareFontFamily{U}{ARtt}{}
+ \DeclareFontShape{U}{ARtt}{m}{it}{<-> artti10}{}%
+ \DeclareFontShape{U}{ARtt}{b}{it}{<->ssub*ARtt/m/it}{}%
+ \DeclareFontShape{U}{ARtt}{bx}{it}{<->ssub*ARtt/m/it}{}%
+\fi
+%
+\ifTM
+\def\mar@scale{.90}% 12pt design size; other sizes simply scaled
+\DeclareFontFamily{U}{ar}{}
+ \DeclareFontShape{U}{ar}{m}{it}{<->s*[\mar@scale]amarri}{}%
+ \DeclareFontShape{U}{ar}{b}{it}{<->s*[\mar@scale]amarbi}{}%
+ \DeclareFontShape{U}{ar}{bx}{it}{<->ssub*ar/b/it}{}%
+\DeclareFontFamily{U}{ARss}{}
+ \DeclareFontShape{U}{ARss}{m}{it}{<->ssub*ar/m/it}{}
+ \DeclareFontShape{U}{ARss}{b}{it}{<->ssub*ar/b/it}{}
+ \DeclareFontShape{U}{ARss}{bx}{it}{<->ssub*ar/b/it}{}
+\DeclareFontFamily{U}{ARtt}{}
+ \DeclareFontShape{U}{ARtt}{m}{it}{<->ssub*ar/m/it}{}
+ \DeclareFontShape{U}{ARtt}{b}{it}{<->ssub*ar/b/it}{}
+ \DeclareFontShape{U}{ARtt}{bx}{it}{<->ssub*ar/b/it}{}
+\fi
+%
+\ifPA
+\def\apar@scale{1.00}% 10pt design size; other sizes simply scaled
+\DeclareFontFamily{U}{ar}{}
+ \DeclareFontShape{U}{ar}{m}{it}{<->s*[\apar@scale]aparri}{}%
+ \DeclareFontShape{U}{ar}{b}{it}{<->s*[\apar@scale]aparbi}{}%
+ \DeclareFontShape{U}{ar}{bx}{it}{<->ssub*ar/b/it}{}%
+\DeclareFontFamily{U}{ARss}{}
+ \DeclareFontShape{U}{ARss}{m}{it}{<->ssub*ar/m/it}{}
+ \DeclareFontShape{U}{ARss}{b}{it}{<->ssub*ar/b/it}{}
+ \DeclareFontShape{U}{ARss}{bx}{it}{<->ssub*ar/b/it}{}
+\DeclareFontFamily{U}{ARtt}{}
+ \DeclareFontShape{U}{ARtt}{m}{it}{<->ssub*ar/m/it}{}
+ \DeclareFontShape{U}{ARtt}{b}{it}{<->ssub*ar/b/it}{}
+ \DeclareFontShape{U}{ARtt}{bx}{it}{<->ssub*ar/b/it}{}
+\fi
+
+
+\newcommand*\ARm{\mathchoice
+ {\hbox{\fontencoding{U}\fontfamily{ar}\fontsize{\tf@size}{\f@baselineskip}\fontshape{it}\selectfont A}}%
+ {\hbox{\fontencoding{U}\fontfamily{ar}\fontsize{\tf@size}{\f@baselineskip}\fontshape{it}\selectfont A}}%
+ {\hbox{\fontencoding{U}\fontfamily{ar}\fontsize{\sf@size}{\f@baselineskip}\fontshape{it}\selectfont A}}%
+ {\hbox{\fontencoding{U}\fontfamily{ar}\fontsize{\ssf@size}{\f@baselineskip}\fontshape{it}\selectfont A}}}
+
+\newcommand*\ARmb{\mathchoice
+ {\hbox{\fontencoding{U}\fontfamily{ar}\fontseries{b}\fontsize{\tf@size}{\f@baselineskip}\fontshape{it}\selectfont A}}%
+ {\hbox{\fontencoding{U}\fontfamily{ar}\fontseries{b}\fontsize{\tf@size}{\f@baselineskip}\fontshape{it}\selectfont A}}%
+ {\hbox{\fontencoding{U}\fontfamily{ar}\fontseries{b}\fontsize{\sf@size}{\f@baselineskip}\fontshape{it}\selectfont A}}%
+ {\hbox{\fontencoding{U}\fontfamily{ar}\fontseries{b}\fontsize{\ssf@size}{\f@baselineskip}\fontshape{it}\selectfont A}}}
+
+% Serifed
+\DeclareRobustCommand{\AR}{\ifmmode\ARm\else{\fontencoding{U}\fontfamily{ar}\fontshape{it}\selectfont A}\fi}
+\DeclareRobustCommand{\ARb}{\ifmmode\ARmb\else{\fontencoding{U}\fontfamily{ar}\fontshape{it}\fontseries{b}\selectfont A}\fi}
+% Sans serif
+\DeclareRobustCommand{\ARss}{\ifmmode\ARm\else{\fontencoding{U}\fontfamily{ARss}\fontshape{it}\selectfont A}\fi}
+\DeclareRobustCommand{\ARssb}{\ifmmode\ARmb\else{\fontencoding{U}\fontfamily{ARss}\fontshape{it}\fontseries{b}\selectfont A}\fi}
+% Monospaced
+\DeclareRobustCommand{\ARtt}{\ifmmode\ARm\else{\fontencoding{U}\fontfamily{ARtt}\fontshape{it}\selectfont A}\fi}
+
+
+
+
+\endinput
diff --git a/macros/latex/contrib/aspectratio/ar.tex b/macros/latex/contrib/aspectratio/ar.tex
new file mode 100644
index 0000000000..f0aafd6de6
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/ar.tex
@@ -0,0 +1,162 @@
+% !TEX TS-program = pdflatex
+% !TEX encoding = UTF-8 Unicode
+
+\documentclass[a4paper]{article}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{amsmath}
+%
+% The following three lines are to be commented out in order to chose
+% the other font options
+\usepackage{lmodern}
+\usepackage{ar}
+\newcommand\aroption{CM }
+%
+% The following three lines are to be commented out in order to chose
+% the other font options
+%\usepackage{txfonts}
+%\usepackage[TX]{ar}
+%\newcommand\aroption{TX }
+%
+% The following three lines are to be commented out in order to chose
+% the other font options
+%\usepackage{pxfonts}
+%\usepackage[PX]{ar}
+%\newcommand\aroption{PX }
+
+\usepackage{textcomp,mflogo,booktabs}
+
+\usepackage[a4paper,textwidth=15cm,textheight=24cm,%
+ hcentering,vcentering]{geometry}
+
+\newcommand\cs[1]{\texttt{\char`\\#1}}
+\newcommand\meta[1]{\texttt{\textlangle{\normalfont\textit{#1}}\textlangle}}
+\newcommand\marg[1]{\texttt{\{\meta{#1}\}}}
+\newcommand\oarg[1]{\texttt{[\meta{#1}]}}
+\newcommand\pack[1]{\textbf{\sffamily#1}}
+\newcommand\Arg[1]{\texttt{\{#1\}}}
+\newcommand\file[1]{\texttt{#1}}
+
+
+\title{\textbf{The design of the ``A-R'' ligature\\
+with Computer Modern, Times, and Palatino\\
+compatible styles: \AR}}
+\author{Agostino De Marco}
+\date{\today\qquad version 2.0}
+
+\begin{document}
+\maketitle
+
+\begin{abstract}
+The ``aspect ratio'' symbol is used very much in aerodynamics and aeronautics to express a particular geometric property of airplane wing planforms. Very often in textbooks the quantity is simply called ``A'' because of typographic limitations of the typesetting system.
+In 1998 Claudio Beccari (CB) came up with a well designed glyph, particularly suited for use with Computer Modern fonts and its siblings. An example of use of this symbol is given by the following definition of the aspect ratio of a wing:
+\[
+\AR = \frac{(\textup{wing span})^2}{(\textup{wing planform area})}= \frac{b^2}{S}
+\]
+As it can be seen from the above formula, the glyph is a ligature between a capital A and a capital R, much as the \texttt{\string\AE} command produces the ligature \AE\ between a capital A and a capital E.
+\end{abstract}
+
+\section{Package usage}
+The symbol \AR\ is accessed in \LaTeX\ by means of the package \pack{ar} and is produced by the command \cs{AR}, in both math and text modes.
+
+The package is loaded by the usual command:
+\begin{flushleft}
+\cs{usepackage}\oarg{options}\Arg{ar}
+\end{flushleft}
+The available options are the following:
+\begin{description}
+\item[CM] is the default setting and produces glyphs that are consistent with Computer Modern, CM-super, EC, and Latin Modern fonts;
+\item[TM] or \textbf{TX} selects glyphs that are suitable with the Times, and Times eXtended fonts, but they are generally suited with other narrow fonts as, for example, the Linux Libertine ones.
+\item[PA] or \textbf{PX} selects glyphs that are suitable with Palatino, Palatino eXtended, Mathpazo, and other wide fonts.
+\end{description}
+
+These options have been defined to allow the consistent use of the aspect ratio symbol in documents typeset with fonts other than Computer Modern and its siblings. Hopefully additional options will be roved in the future for a more comprehensive font support.
+
+\section{Package contents}
+
+The package contains several files of different types:
+\begin{itemize}
+\item This \file{ar.tex} and its compiled result \file{ar.pdf}.
+\item The \MF\ source files \file{ar}\meta{size}\file{.mf} in order to produce the bitmapped fonts, in case the user wanted to typeset a document in DVI format and wanted to preview it with a DVI viewer. The \meta{size} ranges from 5 to 12, in the usual sequence as any other math font in the \TeX\ system.
+\item The \MF\ source files for sans serif medium and bold fonts in 10pt size and the only source file for the typewriter monospaced version of the font in 10 pt size.
+\item The metric files \file{*.tfm} for both the bitmapped and vector fonts.
+\item The vector font files for the Computer Modern version, \file{ar}\meta{series}\meta{size}\file{.pfb} includiong the single 10pt size sans serif and typewriter style fonts, and the vector font files for the Times and Palatino variants, \file{amar}\meta{series}\file{i.pfb} and \file{apar}\meta{series}\file{i.pfb}. The meta{series} is either empty or equal to `b', for medium and bold series respectively.
+\item The \file{ar.sty} extension file through which the suitable settings are made and the \AR\ symbol made available to the user.
+\item The \file{aspectratio.map} file necessary to configure your system for having the vector typesetting engines access the vector fonts.
+\end{itemize}
+
+
+\section{Installing the package and the fonts}
+
+If the whole package is not already installed by your \TeX\ system distribution, we suggest to create an \file{AspectRatio} folder under these branches of your personal (for individual usage) or local (for machine wide usage) \file{TEXMF} tree\footnote{Here we use the UNIX folder separator \texttt{/}; change \texttt{/} with \texttt{\textbackslash} on Windows platforms. Moreover we do not specify the full path from the disk root, but we show only the end branches preceded by an ellipsis.}:
+\begin{itemize}
+\item \file{.../doc/latex/AspectRatio/}: move this file{ar.pdf} file to this folder;
+\item \file{.../source/latex/AspectRatio/}: move the corresponding \file{ar.tex} file to this folder;
+\item \file{.../tex/latex/AspectRatio/}: move the \file{ar.sty} to this folder;
+\item \file{.../fonts/source/public/AspectRatio/}: move all the \file{*.mf} files to this folder;
+\item \file{.../fonts/tfm/public/AspectRatio/}: move all the \file{*.tfm} files to this folder;
+\item \file{.../fonts/type1/public/AspectRatio/}: move all the \file{*.,pub} files to this folder;
+\item \file{.../fonts/map/AspectRatio/}: move all the \file{*.map} files to this folder.
+\end{itemize}
+If your TeX distribution requires it, refresh the file name database according to the procedure described in your system guide.
+
+In order to use the Type~1 fonts, you must follow the instructions that came with your \TeX\ system distribution; the idea with all distributions is to let the configuration file \file{updmap.cfg} know about the new map file; you have to execute a \TeX\ system command in order to regenerate the map file suitable for the pdftex, dvips, and dvipdfm programs; after the operation is completed the \LaTeX\ engine will use the bitmapped fonts in the DVI output file, while the other vector font oriented engines will use the vector fonts in Type~1 format.
+
+\section{Author guide}
+
+The symbol \AR, as a means for indicating the aspect ratio, is meaningful only in mathematics, so that only the ``italic'' shape makes sense. As an isolated symbol the \AR\ ligature might be used also in text mode outside a math expression.
+
+Keeping in mind that only the ``italic'' shape is available, with the Computer Modern and the Times or Palatino variants, the ligature produced by \cs{AR} is sensitive to the text series declarations or commands. In math mode the bold symbol is available only through the explicit command \cs{ARb}. This asymmetry arises in order to avoid defining yet another math font group with an alphabet for medium math and a variant for bold math. Remember that when typesetting math, the various typesetting engines can handle a maximum of 16 alphabets; it does not happen very often, but while testing this very package with different fonts we eventually exceeded this maxim number and we produced an immediate fatal error. Therefore we decided that for just one glyph it was totally useless to define a new math group and we went around this problem with a \cs{mathcoice} work-around that allows us to actually typeset in the proper math size within a box to be used in math mode; apparently complicated, but actually very simple. This, on the other side, forbids us to use the regular math font switching commands to adapt the font family to the requested one.
+
+Table~\ref{tab:glyphs} shows the various ways to produce the \AR\ symbol in math and in text mode with the various families available with the Computer Modern compliant \AR\ symbol. With Times and Palatino there is only one family available, the serifed one, and the variant commands resort to the italic shape.
+
+If you get the source file of this documentation (\file{ar.tex} and comment out certain lines in the preamble, while uncommenting certain other lines (clearly marked in the preamble itself) you can typeset again this same file with the Times o Palatino fonts and you can verify the outcome of the various commands in the above mentioned table and in the following examples.
+
+\begin{table}
+\vspace*{-\bigskipamount}
+\caption{Symbols and commands in both math and text modes}\label{tab:glyphs}
+\bigskip
+{\centering
+\begin{tabular}{lcccc}
+\toprule
+Description & Math & Math & Text & Text \\
+ & symbol& command &symbol & command \\
+\midrule
+Medium ligature & \AR & \cs{AR} & \AR & \cs{AR} \\
+Bold ligature &$\ARb$
+ &\cs{ARb}
+ &\textbf{\AR}
+ &\cs{textbf}\Arg{\cs{AR}}\\
+Medium sans serif ligature& & &\ARss
+ &\cs{ARss}\\
+Bold sans serif ligature & & &\textbf{\ARss}
+ &\cs{textbf}\Arg{\cs{ARss}}\\
+Monospaced ligature & & &\ARtt
+ &\cs{ARtt}\\
+\bottomrule
+\end{tabular}
+\par}
+\medskip
+{\footnotesize
+By means of the specified options it is possible to get the corresponding glyphs in Times or Palatino. Remember, though, that both Times and Palatino have only the proportional serifed medium and bold fonts, so there is no possibility of using the sans serif or the monospaced version. Avoid using the Computer Modern monospaced version; it is available, but certainly the complex ligature does not fit well into the narrow character width of the monospaced fonts.\par}
+\end{table}
+
+Here we show the various series, shapes, and sizes available with the package; with the CM fonts and their siblings you get the various families produce the proper variations; with the Times and Platino variants you get only the italics medium and bold variations always in serifed italics.
+\begin{center}
+\noindent\begin{tabular}{ll}
+(\aroption Regular)& {\tiny \AR} {\scriptsize \AR} {\footnotesize \AR} {\small \AR} {\normalsize \AR} {\large \AR} {\Large \AR} {\LARGE \AR} {\huge \AR} {\Huge \AR}\\
+(\aroption Bold)& {\bfseries{\tiny \AR} {\scriptsize \AR} {\footnotesize \AR} {\small \AR} {\normalsize \AR} {\large \AR} {\Large \AR} {\LARGE \AR} {\huge \AR} {\Huge \AR}}\\
+(\aroption Sans serif regular)& {\tiny \ARss} {\scriptsize \ARss} {\footnotesize \ARss} {\small \ARss} {\normalsize \ARss} {\large \ARss} {\Large \ARss} {\LARGE \ARss} {\huge \ARss} {\Huge \ARss}\\
+(\aroption Sans serif bold)& {\bfseries{\tiny \ARss} {\scriptsize \ARss} {\footnotesize \ARss} {\small \ARss} {\normalsize \ARss} {\large \ARss} {\Large \ARss} {\LARGE \ARss} {\huge \ARss} {\Huge \ARss}}\\
+(\aroption Monospaced regular)& {\tiny \ARtt} {\scriptsize \ARtt} {\footnotesize \ARtt} {\small \ARtt} {\normalsize \ARtt} {\large \ARtt} {\Large \ARtt} {\LARGE \ARtt} {\huge \ARtt} {\Huge \ARtt}
+\end{tabular}
+\end{center}
+
+\section{Legal issues}
+This work is distributed under the LaTeX Project Public Licence, version 1.3 or later; the Licence text is distributed with any distribution of the TEX system.
+
+This package is temporarily maintained by Claudio Beccari \texttt{claudio dot beccari at gmail dot com}.
+
+\end{document}
+
+
diff --git a/macros/latex/contrib/aspectratio/ar10.mf b/macros/latex/contrib/aspectratio/ar10.mf
new file mode 100644
index 0000000000..de209b5c6a
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/ar10.mf
@@ -0,0 +1,142 @@
+% Computer Modern Roman 10 point
+if unknown cmbase: input cmbase fi
+
+font_identifier:="AR"; font_size 10pt#;
+
+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#:=0pt#; % 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#:=25/36pt#; % lowercase stem breadth
+curve#:=30/36pt#; % lowercase curve breadth
+ess#:=27/36pt#; % breadth in middle of lowercase s
+flare#:=33/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=38/36pt#; % diameter of dots
+cap_hair#:=11/36pt#; % uppercase hairline breadth
+cap_stem#:=32/36pt#; % uppercase stem breadth
+cap_curve#:=37/36pt#; % uppercase curve breadth
+cap_ess#:=35/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#:=28/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:=0.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:=false; % 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?
+
+mode_setup; font_setup;
+
+
+cmchar "The ligature AR";
+beginchar("A",if serifs: 12u#+.5max(2u#,cap_curve#)
+ else:12.5u#-.5width_adj# fi,cap_height#,0);
+italcorr .75cap_height#*slant- if serifs: 1.75 else: .5 fi\\ u#;
+adjust_fit(6u#+cap_serif_fit#,0);
+pickup tiny.nib; pos1(cap_stem',0); pos2(cap_stem',0);
+lft x1l=lft x2l=hround max(2u,3u-.5cap_stem'); top y1=h; bot y2=0;
+filldraw stroke z1e--z2e; % stem
+penpos3(cap_band,90); penpos4(cap_band,90);
+penpos5(cap_curve if hefty:-3stem_corr fi,0);
+penpos6(vair,-90); penpos7(vair,-90);
+z3r=top z1; y4=y3; y5=.5[y4l,y6l]; y6=y7;
+x7=x2; y7l=vround(.5h+.5vair); x4=x6;
+if serifs: x4=.5w-.5u; x5r=hround(w-2.25u);
+else: x4=.5w+.5u; x5r=hround(w-u); fi
+x4l:=x6l:=x4-.125cap_curve;
+fill stroke z3e..pulled_arc.e(4,5) & pulled_arc.e(5,6)..z7e; % lobe
+if serifs: pos6'(vair,-90); pos0(cap_stem,180);
+ pos8(cap_curve,180); pos9(vair,-90); pos10(hair,0);
+ z6'=z6; lft x0r=lft x8r=hround(x5-2/3u-.5cap_curve);
+ y8=1/3[y2,y7]; y0=3/5[y2,y7]; x9=.5[x8l,x10r];
+ bot y9r=-o; rt x10r=hround(w-.05u); y10=1/4[y2,y7];
+ filldraw stroke z6'e{right}..z0e---z8e....z9e{right}..z10e{up}; % tail
+ dish_serif(2,1,c,1/3,cap_jut,d,1/3,cap_jut); % lower serif
+else: penpos8(cap_stem-2stem_corr,0); penpos9(cap_stem,0);
+ x8=x6+.5u; y8=y6; x9r=hround(w-.5u); y9=0;
+ fill z8l--diag_end(8l,9l,.5,1,9r,8r)--z8r--cycle; fi % tail
+left_stem=if monospace:fudged.hair else: cap_hair fi if hefty: -3stem_corr fi;
+outer_jut=.8cap_jut; x11l=l+letter_fit+outer_jut+.5u; y11=0;
+x12=x1l-apex_corr-if monospace:2 fi\\u; y12=h;
+alpha=diag_ratio(1,.5left_stem,y12-y11,x12-x11l);
+penpos11(alpha*left_stem,0); penpos12(alpha*left_stem,0);
+fill diag_end(12l,11l,1,1,11r,12r)
+ --diag_end(11r,12r,1,1,12l,11l)--cycle; % diagonal
+y15=h-slab; z15=whatever[z11,z12];
+fill z15--(x1,y15)--(x1,h)--z12--cycle; % link
+penpos13(whatever,angle(z2-z1)); z13=whatever[z11,z12];
+penpos14(cap_band,90); x14=x7; y13l=y14l; y13r=y14r;
+if hefty: y14r=.4h; else: y14=y7; fi
+penstroke z13e--z14e; % bar line
+if serifs: numeric inner_jut; pickup tiny.nib;
+ prime_points_inside(11,12);
+ if rt x11'r+cap_jut+.5u+1<=lft x2l-.75cap_jut:
+ inner_jut=cap_jut;
+ else:
+ rt x11'r+inner_jut+.5u+1=lft x2l-.75inner_jut;
+ fi
+ dish_serif(11',12,i,1/2,outer_jut,j,.6,inner_jut)(dark); % lower left serif
+ nodish_serif(1,2,a,1/3,cap_jut+x1l-x12,b,1/3,.5cap_jut); % upper serif
+fi
+math_fit(0,.75ic#);
+penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); endchar;
+
+font_slant slant; font_x_height x_height#;
+if monospace: font_normal_space 9u#; % no stretching or shrinking
+ font_quad 18u#;
+ font_extra_space 9u#;
+else: font_normal_space 6u#+2letter_fit#;
+ font_normal_stretch 3u#; font_normal_shrink 2u#;
+ font_quad 18u#+4letter_fit#;
+ font_extra_space 2u#;
+fi
+
+bye.
+
diff --git a/macros/latex/contrib/aspectratio/ar10.pfb b/macros/latex/contrib/aspectratio/ar10.pfb
new file mode 100644
index 0000000000..853697e1b8
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/ar10.pfb
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/ar10.tfm b/macros/latex/contrib/aspectratio/ar10.tfm
new file mode 100644
index 0000000000..bbac7e7296
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/ar10.tfm
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/ar12.mf b/macros/latex/contrib/aspectratio/ar12.mf
new file mode 100644
index 0000000000..bd94b0b41b
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/ar12.mf
@@ -0,0 +1,143 @@
+% Computer Modern Roman 12 point
+if unknown cmbase: input cmbase fi
+
+font_identifier:="AR"; font_size 12pt#;
+
+u#:=23.5/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5.8/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=324/36pt#; % height of tallest characters
+asc_height#:=300/36pt#; % height of lowercase ascenders
+cap_height#:=295.2/36pt#; % height of caps
+fig_height#:=278.4/36pt#; % height of numerals
+x_height#:=186/36pt#; % height of lowercase without ascenders
+math_axis#:=108/36pt#; % axis of symmetry for math symbols
+bar_height#:=104.4/36pt#; % height of crossbar in lowercase e
+comma_depth#:=84/36pt#; % depth of comma below baseline
+desc_depth#:=84/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.5/36pt#; % width of extrafine details
+hair#:=9.5/36pt#; % lowercase hairline breadth
+stem#:=27/36pt#; % lowercase stem breadth
+curve#:=32/36pt#; % lowercase curve breadth
+ess#:=30/36pt#; % breadth in middle of lowercase s
+flare#:=35/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=42/36pt#; % diameter of dots
+cap_hair#:=11.5/36pt#; % uppercase hairline breadth
+cap_stem#:=33/36pt#; % uppercase stem breadth
+cap_curve#:=38/36pt#; % uppercase curve breadth
+cap_ess#:=32/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.44pt#; % thickness of lines in math symbols
+
+dish#:=1/36pt#; % amount erased at top or bottom of serifs
+bracket#:=24/36pt#; % vertical distance from serif base to tangent
+jut#:=35/36pt#; % protrusion of lowercase serifs
+cap_jut#:=41/36pt#; % protrusion of uppercase serifs
+beak_jut#:=11.4/36pt#; % horizontal protrusion of beak serifs
+beak#:=84/36pt#; % vertical protrusion of beak serifs
+vair#:=8.5/36pt#; % vertical diameter of hairlines
+notch_cut#:=12pt#; % maximum breadth above or below notches
+bar#:=12.5/36pt#; % lowercase bar thickness
+slab#:=12.5/36pt#; % serif and arm thickness
+cap_bar#:=12.5/36pt#; % uppercase bar thickness
+cap_band#:=12.5/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=12pt#; % max breadth above/below uppercase notches
+serif_drop#:=4.8/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#:=9/36pt#; % amount of overshoot for curves
+apex_o#:=9/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.2; % 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?
+
+mode_setup; font_setup;
+
+
+cmchar "The ligature AR";
+beginchar("A",if serifs: 12u#+.5max(2u#,cap_curve#)
+ else:12.5u#-.5width_adj# fi,cap_height#,0);
+italcorr .75cap_height#*slant- if serifs: 1.75 else: .5 fi\\ u#;
+adjust_fit(6u#+cap_serif_fit#,0);
+pickup tiny.nib; pos1(cap_stem',0); pos2(cap_stem',0);
+lft x1l=lft x2l=hround max(2u,3u-.5cap_stem'); top y1=h; bot y2=0;
+filldraw stroke z1e--z2e; % stem
+penpos3(cap_band,90); penpos4(cap_band,90);
+penpos5(cap_curve if hefty:-3stem_corr fi,0);
+penpos6(vair,-90); penpos7(vair,-90);
+z3r=top z1; y4=y3; y5=.5[y4l,y6l]; y6=y7;
+x7=x2; y7l=vround(.5h+.5vair); x4=x6;
+if serifs: x4=.5w-.5u; x5r=hround(w-2.25u);
+else: x4=.5w+.5u; x5r=hround(w-u); fi
+x4l:=x6l:=x4-.125cap_curve;
+fill stroke z3e..pulled_arc.e(4,5) & pulled_arc.e(5,6)..z7e; % lobe
+if serifs: pos6'(vair,-90); pos0(cap_stem,180);
+ pos8(cap_curve,180); pos9(vair,-90); pos10(hair,0);
+ z6'=z6; lft x0r=lft x8r=hround(x5-2/3u-.5cap_curve);
+ y8=1/3[y2,y7]; y0=3/5[y2,y7]; x9=.5[x8l,x10r];
+ bot y9r=-o; rt x10r=hround(w-.05u); y10=1/4[y2,y7];
+ filldraw stroke z6'e{right}..z0e---z8e....z9e{right}..z10e{up}; % tail
+ dish_serif(2,1,c,1/3,cap_jut,d,1/3,cap_jut); % lower serif
+else: penpos8(cap_stem-2stem_corr,0); penpos9(cap_stem,0);
+ x8=x6+.5u; y8=y6; x9r=hround(w-.5u); y9=0;
+ fill z8l--diag_end(8l,9l,.5,1,9r,8r)--z8r--cycle; fi % tail
+left_stem=if monospace:fudged.hair else: cap_hair fi if hefty: -3stem_corr fi;
+outer_jut=.8cap_jut; x11l=l+letter_fit+outer_jut+.5u; y11=0;
+x12=x1l-apex_corr-if monospace:2 fi\\u; y12=h;
+alpha=diag_ratio(1,.5left_stem,y12-y11,x12-x11l);
+penpos11(alpha*left_stem,0); penpos12(alpha*left_stem,0);
+fill diag_end(12l,11l,1,1,11r,12r)
+ --diag_end(11r,12r,1,1,12l,11l)--cycle; % diagonal
+y15=h-slab; z15=whatever[z11,z12];
+fill z15--(x1,y15)--(x1,h)--z12--cycle; % link
+penpos13(whatever,angle(z2-z1)); z13=whatever[z11,z12];
+penpos14(cap_band,90); x14=x7; y13l=y14l; y13r=y14r;
+if hefty: y14r=.4h; else: y14=y7; fi
+penstroke z13e--z14e; % bar line
+if serifs: numeric inner_jut; pickup tiny.nib;
+ prime_points_inside(11,12);
+ if rt x11'r+cap_jut+.5u+1<=lft x2l-.75cap_jut:
+ inner_jut=cap_jut;
+ else:
+ rt x11'r+inner_jut+.5u+1=lft x2l-.75inner_jut;
+ fi
+ dish_serif(11',12,i,1/2,outer_jut,j,.6,inner_jut)(dark); % lower left serif
+ nodish_serif(1,2,a,1/3,cap_jut+x1l-x12,b,1/3,.5cap_jut); % upper serif
+fi
+math_fit(0,.75ic#);
+penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); endchar;
+
+font_slant slant; font_x_height x_height#;
+if monospace: font_normal_space 9u#; % no stretching or shrinking
+ font_quad 18u#;
+ font_extra_space 9u#;
+else: font_normal_space 6u#+2letter_fit#;
+ font_normal_stretch 3u#; font_normal_shrink 2u#;
+ font_quad 18u#+4letter_fit#;
+ font_extra_space 2u#;
+fi
+
+bye.
+
+
diff --git a/macros/latex/contrib/aspectratio/ar12.pfb b/macros/latex/contrib/aspectratio/ar12.pfb
new file mode 100644
index 0000000000..492a726acd
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/ar12.pfb
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/ar12.tfm b/macros/latex/contrib/aspectratio/ar12.tfm
new file mode 100644
index 0000000000..2b66ccb80d
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/ar12.tfm
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/ar5.pfb b/macros/latex/contrib/aspectratio/ar5.pfb
new file mode 100644
index 0000000000..4b989d4b78
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/ar5.pfb
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/ar5.tfm b/macros/latex/contrib/aspectratio/ar5.tfm
new file mode 100644
index 0000000000..dcbf76d0cb
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/ar5.tfm
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/ar6.mf b/macros/latex/contrib/aspectratio/ar6.mf
new file mode 100644
index 0000000000..15c456637a
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/ar6.mf
@@ -0,0 +1,144 @@
+% Computer Modern Roman 6 point
+if unknown cmbase: input cmbase fi
+
+font_identifier:="AR"; font_size 6pt#;
+
+u#:=14/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=2.8/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=6/36pt#; % extra space added to all sidebars
+
+body_height#:=162/36pt#; % height of tallest characters
+asc_height#:=150/36pt#; % height of lowercase ascenders
+cap_height#:=147.6/36pt#; % height of caps
+fig_height#:=139.2/36pt#; % height of numerals
+x_height#:=93/36pt#; % height of lowercase without ascenders
+math_axis#:=54/36pt#; % axis of symmetry for math symbols
+bar_height#:=52.2/36pt#; % height of crossbar in lowercase e
+comma_depth#:=42/36pt#; % depth of comma below baseline
+desc_depth#:=42/36pt#; % depth of lowercase descenders
+
+crisp#:=6.5/36pt#; % diameter of serif corners
+tiny#:=6.5/36pt#; % diameter of rounded corners
+fine#:=6/36pt#; % diameter of sharply rounded corners
+thin_join#:=6/36pt#; % width of extrafine details
+hair#:=8/36pt#; % lowercase hairline breadth
+stem#:=17.5/36pt#; % lowercase stem breadth
+curve#:=20/36pt#; % lowercase curve breadth
+ess#:=17/36pt#; % breadth in middle of lowercase s
+flare#:=20.5/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=26/36pt#; % diameter of dots
+cap_hair#:=8.5/36pt#; % uppercase hairline breadth
+cap_stem#:=21/36pt#; % uppercase stem breadth
+cap_curve#:=23.5/36pt#; % uppercase curve breadth
+cap_ess#:=18.5/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.31pt#; % thickness of lines in math symbols
+
+dish#:=.8/36pt#; % amount erased at top or bottom of serifs
+bracket#:=12/36pt#; % vertical distance from serif base to tangent
+jut#:=19/36pt#; % protrusion of lowercase serifs
+cap_jut#:=23/36pt#; % protrusion of uppercase serifs
+beak_jut#:=6.8/36pt#; % horizontal protrusion of beak serifs
+beak#:=42/36pt#; % vertical protrusion of beak serifs
+vair#:=7/36pt#; % vertical diameter of hairlines
+notch_cut#:=6pt#; % maximum breadth above or below notches
+bar#:=8.5/36pt#; % lowercase bar thickness
+slab#:=8.5/36pt#; % serif and arm thickness
+cap_bar#:=8.5/36pt#; % uppercase bar thickness
+cap_band#:=8.5/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=6pt#; % max breadth above/below uppercase notches
+serif_drop#:=2.4/36pt#; % vertical drop of sloped serifs
+stem_corr#:=.8/36pt#; % for small refinements of stem breadth
+vair_corr#:=.7/36pt#; % for small refinements of hairline height
+apex_corr#:=0pt#; % extra width at diagonal junctions
+
+o#:=4.5/36pt#; % amount of overshoot for curves
+apex_o#:=4.5/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:=.8; % 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?
+
+mode_setup; font_setup;
+
+
+cmchar "The ligature AR";
+beginchar("A",if serifs: 12u#+.5max(2u#,cap_curve#)
+ else:12.5u#-.5width_adj# fi,cap_height#,0);
+italcorr .75cap_height#*slant- if serifs: 1.75 else: .5 fi\\ u#;
+adjust_fit(6u#+cap_serif_fit#,0);
+pickup tiny.nib; pos1(cap_stem',0); pos2(cap_stem',0);
+lft x1l=lft x2l=hround max(2u,3u-.5cap_stem'); top y1=h; bot y2=0;
+filldraw stroke z1e--z2e; % stem
+penpos3(cap_band,90); penpos4(cap_band,90);
+penpos5(cap_curve if hefty:-3stem_corr fi,0);
+penpos6(vair,-90); penpos7(vair,-90);
+z3r=top z1; y4=y3; y5=.5[y4l,y6l]; y6=y7;
+x7=x2; y7l=vround(.5h+.5vair); x4=x6;
+if serifs: x4=.5w-.5u; x5r=hround(w-2.25u);
+else: x4=.5w+.5u; x5r=hround(w-u); fi
+x4l:=x6l:=x4-.125cap_curve;
+fill stroke z3e..pulled_arc.e(4,5) & pulled_arc.e(5,6)..z7e; % lobe
+if serifs: pos6'(vair,-90); pos0(cap_stem,180);
+ pos8(cap_curve,180); pos9(vair,-90); pos10(hair,0);
+ z6'=z6; lft x0r=lft x8r=hround(x5-2/3u-.5cap_curve);
+ y8=1/3[y2,y7]; y0=3/5[y2,y7]; x9=.5[x8l,x10r];
+ bot y9r=-o; rt x10r=hround(w-.05u); y10=1/4[y2,y7];
+ filldraw stroke z6'e{right}..z0e---z8e....z9e{right}..z10e{up}; % tail
+ dish_serif(2,1,c,1/3,cap_jut,d,1/3,cap_jut); % lower serif
+else: penpos8(cap_stem-2stem_corr,0); penpos9(cap_stem,0);
+ x8=x6+.5u; y8=y6; x9r=hround(w-.5u); y9=0;
+ fill z8l--diag_end(8l,9l,.5,1,9r,8r)--z8r--cycle; fi % tail
+left_stem=if monospace:fudged.hair else: cap_hair fi if hefty: -3stem_corr fi;
+outer_jut=.8cap_jut; x11l=l+letter_fit+outer_jut+.5u; y11=0;
+x12=x1l-apex_corr-if monospace:2 fi\\u; y12=h;
+alpha=diag_ratio(1,.5left_stem,y12-y11,x12-x11l);
+penpos11(alpha*left_stem,0); penpos12(alpha*left_stem,0);
+fill diag_end(12l,11l,1,1,11r,12r)
+ --diag_end(11r,12r,1,1,12l,11l)--cycle; % diagonal
+y15=h-slab; z15=whatever[z11,z12];
+fill z15--(x1,y15)--(x1,h)--z12--cycle; % link
+penpos13(whatever,angle(z2-z1)); z13=whatever[z11,z12];
+penpos14(cap_band,90); x14=x7; y13l=y14l; y13r=y14r;
+if hefty: y14r=.4h; else: y14=y7; fi
+penstroke z13e--z14e; % bar line
+if serifs: numeric inner_jut; pickup tiny.nib;
+ prime_points_inside(11,12);
+ if rt x11'r+cap_jut+.5u+1<=lft x2l-.75cap_jut:
+ inner_jut=cap_jut;
+ else:
+ rt x11'r+inner_jut+.5u+1=lft x2l-.75inner_jut;
+ fi
+ dish_serif(11',12,i,1/2,outer_jut,j,.6,inner_jut)(dark); % lower left serif
+ nodish_serif(1,2,a,1/3,cap_jut+x1l-x12,b,1/3,.5cap_jut); % upper serif
+fi
+math_fit(0,.75ic#);
+penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); endchar;
+
+font_slant slant; font_x_height x_height#;
+if monospace: font_normal_space 9u#; % no stretching or shrinking
+ font_quad 18u#;
+ font_extra_space 9u#;
+else: font_normal_space 6u#+2letter_fit#;
+ font_normal_stretch 3u#; font_normal_shrink 2u#;
+ font_quad 18u#+4letter_fit#;
+ font_extra_space 2u#;
+fi
+
+bye.
+
+
+
diff --git a/macros/latex/contrib/aspectratio/ar6.pfb b/macros/latex/contrib/aspectratio/ar6.pfb
new file mode 100644
index 0000000000..d96a2fdbbc
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/ar6.pfb
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/ar6.tfm b/macros/latex/contrib/aspectratio/ar6.tfm
new file mode 100644
index 0000000000..8c2d97731c
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/ar6.tfm
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/ar7.mf b/macros/latex/contrib/aspectratio/ar7.mf
new file mode 100644
index 0000000000..e5b61f516a
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/ar7.mf
@@ -0,0 +1,145 @@
+% Computer Modern Roman 7 point
+if unknown cmbase: input cmbase fi
+
+font_identifier:="AR"; font_size 7pt#;
+
+u#:=15.5/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=3.5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=4/36pt#; % extra space added to all sidebars
+
+body_height#:=189/36pt#; % height of tallest characters
+asc_height#:=175/36pt#; % height of lowercase ascenders
+cap_height#:=172.2/36pt#; % height of caps
+fig_height#:=162.4/36pt#; % height of numerals
+x_height#:=108.5/36pt#; % height of lowercase without ascenders
+math_axis#:=63/36pt#; % axis of symmetry for math symbols
+bar_height#:=60.9/36pt#; % height of crossbar in lowercase e
+comma_depth#:=49/36pt#; % depth of comma below baseline
+desc_depth#:=49/36pt#; % depth of lowercase descenders
+
+crisp#:=7/36pt#; % diameter of serif corners
+tiny#:=7/36pt#; % diameter of rounded corners
+fine#:=6/36pt#; % diameter of sharply rounded corners
+thin_join#:=6/36pt#; % width of extrafine details
+hair#:=8.5/36pt#; % lowercase hairline breadth
+stem#:=19.5/36pt#; % lowercase stem breadth
+curve#:=22.5/36pt#; % lowercase curve breadth
+ess#:=21/36pt#; % breadth in middle of lowercase s
+flare#:=23.5/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=29/36pt#; % diameter of dots
+cap_hair#:=9/36pt#; % uppercase hairline breadth
+cap_stem#:=23.5/36pt#; % uppercase stem breadth
+cap_curve#:=26.5/36pt#; % uppercase curve breadth
+cap_ess#:=22.5/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.34pt#; % thickness of lines in math symbols
+
+dish#:=.9/36pt#; % amount erased at top or bottom of serifs
+bracket#:=14/36pt#; % vertical distance from serif base to tangent
+jut#:=21/36pt#; % protrusion of lowercase serifs
+cap_jut#:=26/36pt#; % protrusion of uppercase serifs
+beak_jut#:=7.6/36pt#; % horizontal protrusion of beak serifs
+beak#:=49/36pt#; % vertical protrusion of beak serifs
+vair#:=7/36pt#; % vertical diameter of hairlines
+notch_cut#:=7pt#; % maximum breadth above or below notches
+bar#:=9/36pt#; % lowercase bar thickness
+slab#:=9/36pt#; % serif and arm thickness
+cap_bar#:=9/36pt#; % uppercase bar thickness
+cap_band#:=9/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=7pt#; % max breadth above/below uppercase notches
+serif_drop#:=2.8/36pt#; % vertical drop of sloped serifs
+stem_corr#:=.9/36pt#; % for small refinements of stem breadth
+vair_corr#:=.9/36pt#; % for small refinements of hairline height
+apex_corr#:=0pt#; % extra width at diagonal junctions
+
+o#:=5/36pt#; % amount of overshoot for curves
+apex_o#:=5/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:=.6; % 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?
+
+mode_setup; font_setup;
+
+
+cmchar "The ligature AR";
+beginchar("A",if serifs: 12u#+.5max(2u#,cap_curve#)
+ else:12.5u#-.5width_adj# fi,cap_height#,0);
+italcorr .75cap_height#*slant- if serifs: 1.75 else: .5 fi\\ u#;
+adjust_fit(6u#+cap_serif_fit#,0);
+pickup tiny.nib; pos1(cap_stem',0); pos2(cap_stem',0);
+lft x1l=lft x2l=hround max(2u,3u-.5cap_stem'); top y1=h; bot y2=0;
+filldraw stroke z1e--z2e; % stem
+penpos3(cap_band,90); penpos4(cap_band,90);
+penpos5(cap_curve if hefty:-3stem_corr fi,0);
+penpos6(vair,-90); penpos7(vair,-90);
+z3r=top z1; y4=y3; y5=.5[y4l,y6l]; y6=y7;
+x7=x2; y7l=vround(.5h+.5vair); x4=x6;
+if serifs: x4=.5w-.5u; x5r=hround(w-2.25u);
+else: x4=.5w+.5u; x5r=hround(w-u); fi
+x4l:=x6l:=x4-.125cap_curve;
+fill stroke z3e..pulled_arc.e(4,5) & pulled_arc.e(5,6)..z7e; % lobe
+if serifs: pos6'(vair,-90); pos0(cap_stem,180);
+ pos8(cap_curve,180); pos9(vair,-90); pos10(hair,0);
+ z6'=z6; lft x0r=lft x8r=hround(x5-2/3u-.5cap_curve);
+ y8=1/3[y2,y7]; y0=3/5[y2,y7]; x9=.5[x8l,x10r];
+ bot y9r=-o; rt x10r=hround(w-.05u); y10=1/4[y2,y7];
+ filldraw stroke z6'e{right}..z0e---z8e....z9e{right}..z10e{up}; % tail
+ dish_serif(2,1,c,1/3,cap_jut,d,1/3,cap_jut); % lower serif
+else: penpos8(cap_stem-2stem_corr,0); penpos9(cap_stem,0);
+ x8=x6+.5u; y8=y6; x9r=hround(w-.5u); y9=0;
+ fill z8l--diag_end(8l,9l,.5,1,9r,8r)--z8r--cycle; fi % tail
+left_stem=if monospace:fudged.hair else: cap_hair fi if hefty: -3stem_corr fi;
+outer_jut=.8cap_jut; x11l=l+letter_fit+outer_jut+.5u; y11=0;
+x12=x1l-apex_corr-if monospace:2 fi\\u; y12=h;
+alpha=diag_ratio(1,.5left_stem,y12-y11,x12-x11l);
+penpos11(alpha*left_stem,0); penpos12(alpha*left_stem,0);
+fill diag_end(12l,11l,1,1,11r,12r)
+ --diag_end(11r,12r,1,1,12l,11l)--cycle; % diagonal
+y15=h-slab; z15=whatever[z11,z12];
+fill z15--(x1,y15)--(x1,h)--z12--cycle; % link
+penpos13(whatever,angle(z2-z1)); z13=whatever[z11,z12];
+penpos14(cap_band,90); x14=x7; y13l=y14l; y13r=y14r;
+if hefty: y14r=.4h; else: y14=y7; fi
+penstroke z13e--z14e; % bar line
+if serifs: numeric inner_jut; pickup tiny.nib;
+ prime_points_inside(11,12);
+ if rt x11'r+cap_jut+.5u+1<=lft x2l-.75cap_jut:
+ inner_jut=cap_jut;
+ else:
+ rt x11'r+inner_jut+.5u+1=lft x2l-.75inner_jut;
+ fi
+ dish_serif(11',12,i,1/2,outer_jut,j,.6,inner_jut)(dark); % lower left serif
+ nodish_serif(1,2,a,1/3,cap_jut+x1l-x12,b,1/3,.5cap_jut); % upper serif
+fi
+math_fit(0,.75ic#);
+penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); endchar;
+
+font_slant slant; font_x_height x_height#;
+if monospace: font_normal_space 9u#; % no stretching or shrinking
+ font_quad 18u#;
+ font_extra_space 9u#;
+else: font_normal_space 6u#+2letter_fit#;
+ font_normal_stretch 3u#; font_normal_shrink 2u#;
+ font_quad 18u#+4letter_fit#;
+ font_extra_space 2u#;
+fi
+
+bye.
+
+
+
+
diff --git a/macros/latex/contrib/aspectratio/ar7.pfb b/macros/latex/contrib/aspectratio/ar7.pfb
new file mode 100644
index 0000000000..c94550df0d
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/ar7.pfb
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/ar7.tfm b/macros/latex/contrib/aspectratio/ar7.tfm
new file mode 100644
index 0000000000..5a842f03d7
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/ar7.tfm
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/ar8.mf b/macros/latex/contrib/aspectratio/ar8.mf
new file mode 100644
index 0000000000..f6e25cec28
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/ar8.mf
@@ -0,0 +1,143 @@
+% Computer Modern Roman 8 point
+if unknown cmbase: input cmbase fi
+
+font_identifier:="AR"; font_size 8pt#;
+
+u#:=17/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=4.1/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=216/36pt#; % height of tallest characters
+asc_height#:=200/36pt#; % height of lowercase ascenders
+cap_height#:=196.8/36pt#; % height of caps
+fig_height#:=185.6/36pt#; % height of numerals
+x_height#:=124/36pt#; % height of lowercase without ascenders
+math_axis#:=72/36pt#; % axis of symmetry for math symbols
+bar_height#:=69.6/36pt#; % height of crossbar in lowercase e
+comma_depth#:=56/36pt#; % depth of comma below baseline
+desc_depth#:=56/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#:=21.5/36pt#; % lowercase stem breadth
+curve#:=25/36pt#; % lowercase curve breadth
+ess#:=23/36pt#; % breadth in middle of lowercase s
+flare#:=26.5/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=32/36pt#; % diameter of dots
+cap_hair#:=9.5/36pt#; % uppercase hairline breadth
+cap_stem#:=25.5/36pt#; % uppercase stem breadth
+cap_curve#:=29/36pt#; % uppercase curve breadth
+cap_ess#:=26/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.36pt#; % thickness of lines in math symbols
+
+dish#:=1/36pt#; % amount erased at top or bottom of serifs
+bracket#:=16/36pt#; % vertical distance from serif base to tangent
+jut#:=24/36pt#; % protrusion of lowercase serifs
+cap_jut#:=29/36pt#; % protrusion of uppercase serifs
+beak_jut#:=8.4/36pt#; % horizontal protrusion of beak serifs
+beak#:=56/36pt#; % vertical protrusion of beak serifs
+vair#:=8/36pt#; % vertical diameter of hairlines
+notch_cut#:=8pt#; % maximum breadth above or below notches
+bar#:=9.5/36pt#; % lowercase bar thickness
+slab#:=9.5/36pt#; % serif and arm thickness
+cap_bar#:=9.5/36pt#; % uppercase bar thickness
+cap_band#:=9.5/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=8pt#; % max breadth above/below uppercase notches
+serif_drop#:=3.2/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#:=6/36pt#; % amount of overshoot for curves
+apex_o#:=6/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:=.4; % 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?
+
+mode_setup; font_setup;
+
+
+cmchar "The ligature AR";
+beginchar("A",if serifs: 12u#+.5max(2u#,cap_curve#)
+ else:12.5u#-.5width_adj# fi,cap_height#,0);
+italcorr .75cap_height#*slant- if serifs: 1.75 else: .5 fi\\ u#;
+adjust_fit(6u#+cap_serif_fit#,0);
+pickup tiny.nib; pos1(cap_stem',0); pos2(cap_stem',0);
+lft x1l=lft x2l=hround max(2u,3u-.5cap_stem'); top y1=h; bot y2=0;
+filldraw stroke z1e--z2e; % stem
+penpos3(cap_band,90); penpos4(cap_band,90);
+penpos5(cap_curve if hefty:-3stem_corr fi,0);
+penpos6(vair,-90); penpos7(vair,-90);
+z3r=top z1; y4=y3; y5=.5[y4l,y6l]; y6=y7;
+x7=x2; y7l=vround(.5h+.5vair); x4=x6;
+if serifs: x4=.5w-.5u; x5r=hround(w-2.25u);
+else: x4=.5w+.5u; x5r=hround(w-u); fi
+x4l:=x6l:=x4-.125cap_curve;
+fill stroke z3e..pulled_arc.e(4,5) & pulled_arc.e(5,6)..z7e; % lobe
+if serifs: pos6'(vair,-90); pos0(cap_stem,180);
+ pos8(cap_curve,180); pos9(vair,-90); pos10(hair,0);
+ z6'=z6; lft x0r=lft x8r=hround(x5-2/3u-.5cap_curve);
+ y8=1/3[y2,y7]; y0=3/5[y2,y7]; x9=.5[x8l,x10r];
+ bot y9r=-o; rt x10r=hround(w-.05u); y10=1/4[y2,y7];
+ filldraw stroke z6'e{right}..z0e---z8e....z9e{right}..z10e{up}; % tail
+ dish_serif(2,1,c,1/3,cap_jut,d,1/3,cap_jut); % lower serif
+else: penpos8(cap_stem-2stem_corr,0); penpos9(cap_stem,0);
+ x8=x6+.5u; y8=y6; x9r=hround(w-.5u); y9=0;
+ fill z8l--diag_end(8l,9l,.5,1,9r,8r)--z8r--cycle; fi % tail
+left_stem=if monospace:fudged.hair else: cap_hair fi if hefty: -3stem_corr fi;
+outer_jut=.8cap_jut; x11l=l+letter_fit+outer_jut+.5u; y11=0;
+x12=x1l-apex_corr-if monospace:2 fi\\u; y12=h;
+alpha=diag_ratio(1,.5left_stem,y12-y11,x12-x11l);
+penpos11(alpha*left_stem,0); penpos12(alpha*left_stem,0);
+fill diag_end(12l,11l,1,1,11r,12r)
+ --diag_end(11r,12r,1,1,12l,11l)--cycle; % diagonal
+y15=h-slab; z15=whatever[z11,z12];
+fill z15--(x1,y15)--(x1,h)--z12--cycle; % link
+penpos13(whatever,angle(z2-z1)); z13=whatever[z11,z12];
+penpos14(cap_band,90); x14=x7; y13l=y14l; y13r=y14r;
+if hefty: y14r=.4h; else: y14=y7; fi
+penstroke z13e--z14e; % bar line
+if serifs: numeric inner_jut; pickup tiny.nib;
+ prime_points_inside(11,12);
+ if rt x11'r+cap_jut+.5u+1<=lft x2l-.75cap_jut:
+ inner_jut=cap_jut;
+ else:
+ rt x11'r+inner_jut+.5u+1=lft x2l-.75inner_jut;
+ fi
+ dish_serif(11',12,i,1/2,outer_jut,j,.6,inner_jut)(dark); % lower left serif
+ nodish_serif(1,2,a,1/3,cap_jut+x1l-x12,b,1/3,.5cap_jut); % upper serif
+fi
+math_fit(0,.75ic#);
+penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); endchar;
+
+font_slant slant; font_x_height x_height#;
+if monospace: font_normal_space 9u#; % no stretching or shrinking
+ font_quad 18u#;
+ font_extra_space 9u#;
+else: font_normal_space 6u#+2letter_fit#;
+ font_normal_stretch 3u#; font_normal_shrink 2u#;
+ font_quad 18u#+4letter_fit#;
+ font_extra_space 2u#;
+fi
+
+bye.
+
+
diff --git a/macros/latex/contrib/aspectratio/ar8.pfb b/macros/latex/contrib/aspectratio/ar8.pfb
new file mode 100644
index 0000000000..0e221a5451
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/ar8.pfb
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/ar8.tfm b/macros/latex/contrib/aspectratio/ar8.tfm
new file mode 100644
index 0000000000..f60ea02c6b
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/ar8.tfm
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/ar9.mf b/macros/latex/contrib/aspectratio/ar9.mf
new file mode 100644
index 0000000000..4e1ca20bcf
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/ar9.mf
@@ -0,0 +1,144 @@
+% Computer Modern Roman 9 point
+if unknown cmbase: input cmbase fi
+
+font_identifier:="AR"; font_size 9pt#;
+
+u#:=18.5/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=4.6/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=243/36pt#; % height of tallest characters
+asc_height#:=225/36pt#; % height of lowercase ascenders
+cap_height#:=221.4/36pt#; % height of caps
+fig_height#:=208.8/36pt#; % height of numerals
+x_height#:=139.5/36pt#; % height of lowercase without ascenders
+math_axis#:=81/36pt#; % axis of symmetry for math symbols
+bar_height#:=78.3/36pt#; % height of crossbar in lowercase e
+comma_depth#:=63/36pt#; % depth of comma below baseline
+desc_depth#:=63/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#:=23/36pt#; % lowercase stem breadth
+curve#:=27/36pt#; % lowercase curve breadth
+ess#:=25/36pt#; % breadth in middle of lowercase s
+flare#:=29/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=35/36pt#; % diameter of dots
+cap_hair#:=10/36pt#; % uppercase hairline breadth
+cap_stem#:=28/36pt#; % uppercase stem breadth
+cap_curve#:=32/36pt#; % uppercase curve breadth
+cap_ess#:=30/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.38pt#; % thickness of lines in math symbols
+
+dish#:=1/36pt#; % amount erased at top or bottom of serifs
+bracket#:=18/36pt#; % vertical distance from serif base to tangent
+jut#:=27/36pt#; % protrusion of lowercase serifs
+cap_jut#:=33/36pt#; % protrusion of uppercase serifs
+beak_jut#:=9.2/36pt#; % horizontal protrusion of beak serifs
+beak#:=63/36pt#; % vertical protrusion of beak serifs
+vair#:=8/36pt#; % vertical diameter of hairlines
+notch_cut#:=9pt#; % maximum breadth above or below notches
+bar#:=10/36pt#; % lowercase bar thickness
+slab#:=10/36pt#; % serif and arm thickness
+cap_bar#:=10/36pt#; % uppercase bar thickness
+cap_band#:=10/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=9pt#; % max breadth above/below uppercase notches
+serif_drop#:=3.6/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#:=7/36pt#; % amount of overshoot for curves
+apex_o#:=7/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:=.2; % 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?
+
+mode_setup; font_setup;
+
+
+cmchar "The ligature AR";
+beginchar("A",if serifs: 12u#+.5max(2u#,cap_curve#)
+ else:12.5u#-.5width_adj# fi,cap_height#,0);
+italcorr .75cap_height#*slant- if serifs: 1.75 else: .5 fi\\ u#;
+adjust_fit(6u#+cap_serif_fit#,0);
+pickup tiny.nib; pos1(cap_stem',0); pos2(cap_stem',0);
+lft x1l=lft x2l=hround max(2u,3u-.5cap_stem'); top y1=h; bot y2=0;
+filldraw stroke z1e--z2e; % stem
+penpos3(cap_band,90); penpos4(cap_band,90);
+penpos5(cap_curve if hefty:-3stem_corr fi,0);
+penpos6(vair,-90); penpos7(vair,-90);
+z3r=top z1; y4=y3; y5=.5[y4l,y6l]; y6=y7;
+x7=x2; y7l=vround(.5h+.5vair); x4=x6;
+if serifs: x4=.5w-.5u; x5r=hround(w-2.25u);
+else: x4=.5w+.5u; x5r=hround(w-u); fi
+x4l:=x6l:=x4-.125cap_curve;
+fill stroke z3e..pulled_arc.e(4,5) & pulled_arc.e(5,6)..z7e; % lobe
+if serifs: pos6'(vair,-90); pos0(cap_stem,180);
+ pos8(cap_curve,180); pos9(vair,-90); pos10(hair,0);
+ z6'=z6; lft x0r=lft x8r=hround(x5-2/3u-.5cap_curve);
+ y8=1/3[y2,y7]; y0=3/5[y2,y7]; x9=.5[x8l,x10r];
+ bot y9r=-o; rt x10r=hround(w-.05u); y10=1/4[y2,y7];
+ filldraw stroke z6'e{right}..z0e---z8e....z9e{right}..z10e{up}; % tail
+ dish_serif(2,1,c,1/3,cap_jut,d,1/3,cap_jut); % lower serif
+else: penpos8(cap_stem-2stem_corr,0); penpos9(cap_stem,0);
+ x8=x6+.5u; y8=y6; x9r=hround(w-.5u); y9=0;
+ fill z8l--diag_end(8l,9l,.5,1,9r,8r)--z8r--cycle; fi % tail
+left_stem=if monospace:fudged.hair else: cap_hair fi if hefty: -3stem_corr fi;
+outer_jut=.8cap_jut; x11l=l+letter_fit+outer_jut+.5u; y11=0;
+x12=x1l-apex_corr-if monospace:2 fi\\u; y12=h;
+alpha=diag_ratio(1,.5left_stem,y12-y11,x12-x11l);
+penpos11(alpha*left_stem,0); penpos12(alpha*left_stem,0);
+fill diag_end(12l,11l,1,1,11r,12r)
+ --diag_end(11r,12r,1,1,12l,11l)--cycle; % diagonal
+y15=h-slab; z15=whatever[z11,z12];
+fill z15--(x1,y15)--(x1,h)--z12--cycle; % link
+penpos13(whatever,angle(z2-z1)); z13=whatever[z11,z12];
+penpos14(cap_band,90); x14=x7; y13l=y14l; y13r=y14r;
+if hefty: y14r=.4h; else: y14=y7; fi
+penstroke z13e--z14e; % bar line
+if serifs: numeric inner_jut; pickup tiny.nib;
+ prime_points_inside(11,12);
+ if rt x11'r+cap_jut+.5u+1<=lft x2l-.75cap_jut:
+ inner_jut=cap_jut;
+ else:
+ rt x11'r+inner_jut+.5u+1=lft x2l-.75inner_jut;
+ fi
+ dish_serif(11',12,i,1/2,outer_jut,j,.6,inner_jut)(dark); % lower left serif
+ nodish_serif(1,2,a,1/3,cap_jut+x1l-x12,b,1/3,.5cap_jut); % upper serif
+fi
+math_fit(0,.75ic#);
+penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); endchar;
+
+font_slant slant; font_x_height x_height#;
+if monospace: font_normal_space 9u#; % no stretching or shrinking
+ font_quad 18u#;
+ font_extra_space 9u#;
+else: font_normal_space 6u#+2letter_fit#;
+ font_normal_stretch 3u#; font_normal_shrink 2u#;
+ font_quad 18u#+4letter_fit#;
+ font_extra_space 2u#;
+fi
+
+bye.
+
+
+
diff --git a/macros/latex/contrib/aspectratio/ar9.pfb b/macros/latex/contrib/aspectratio/ar9.pfb
new file mode 100644
index 0000000000..4e5b8cf09d
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/ar9.pfb
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/ar9.tfm b/macros/latex/contrib/aspectratio/ar9.tfm
new file mode 100644
index 0000000000..f82929425f
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/ar9.tfm
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/arb10.mf b/macros/latex/contrib/aspectratio/arb10.mf
new file mode 100644
index 0000000000..a668355415
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/arb10.mf
@@ -0,0 +1,142 @@
+% Computer Modern Bold Extended Text Italic 10 point
+if unknown cmbase: input cmbase fi
+
+font_identifier:="ARBX"; font_size 10pt#;
+
+u#:=21.2/36pt#; % unit width
+width_adj#:=11/36pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=7/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=11/36pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=250/36pt#; % height of lowercase ascenders
+cap_height#:=247/36pt#; % height of caps
+fig_height#:=232/36pt#; % height of numerals
+x_height#:=160/36pt#; % height of lowercase without ascenders
+math_axis#:=90/36pt#; % axis of symmetry for math symbols
+bar_height#:=85/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#:=2/36pt#; % diameter of serif corners
+tiny#:=13/36pt#; % diameter of rounded corners
+fine#:=10/36pt#; % diameter of sharply rounded corners
+thin_join#:=10/36pt#; % width of extrafine details
+hair#:=20/36pt#; % lowercase hairline breadth
+stem#:=38/36pt#; % lowercase stem breadth
+curve#:=43/36pt#; % lowercase curve breadth
+ess#:=35/36pt#; % breadth in middle of lowercase s
+flare#:=42/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=53/36pt#; % diameter of dots
+cap_hair#:=22/36pt#; % uppercase hairline breadth
+cap_stem#:=49/36pt#; % uppercase stem breadth
+cap_curve#:=52/36pt#; % uppercase curve breadth
+cap_ess#:=50/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.6pt#; % thickness of lines in math symbols
+
+dish#:=1/36pt#; % amount erased at top or bottom of serifs
+bracket#:=10/36pt#; % vertical distance from serif base to tangent
+jut#:=27/36pt#; % protrusion of lowercase serifs
+cap_jut#:=39/36pt#; % protrusion of uppercase serifs
+beak_jut#:=10/36pt#; % horizontal protrusion of beak serifs
+beak#:=70/36pt#; % vertical protrusion of beak serifs
+vair#:=13/36pt#; % vertical diameter of hairlines
+notch_cut#:=10pt#; % maximum breadth above or below notches
+bar#:=17/36pt#; % lowercase bar thickness
+slab#:=17/36pt#; % serif and arm thickness
+cap_bar#:=17/36pt#; % uppercase bar thickness
+cap_band#:=17/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=10pt#; % max breadth above/below uppercase notches
+serif_drop#:=3/36pt#; % vertical drop of sloped serifs
+stem_corr#:=2/36pt#; % for small refinements of stem breadth
+vair_corr#:=1.5/36pt#; % for small refinements of hairline height
+apex_corr#:=0pt#; % extra width at diagonal junctions
+
+o#:=6/36pt#; % amount of overshoot for curves
+apex_o#:=6/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:=.5; % extra openness of math symbols
+superness:=8/11; % parameter for superellipses
+superpull:=1/8; % extra openness inside bowls
+beak_darkness:=.4; % 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?
+
+mode_setup; font_setup;
+
+
+cmchar "The ligature AR";
+beginchar("A",if serifs: 12u#+.5max(2u#,cap_curve#)
+ else:12.5u#-.5width_adj# fi,cap_height#,0);
+italcorr .75cap_height#*slant- if serifs: 1.75 else: .5 fi\\ u#;
+adjust_fit(6u#+cap_serif_fit#,0);
+pickup tiny.nib; pos1(cap_stem',0); pos2(cap_stem',0);
+lft x1l=lft x2l=hround max(2u,3u-.5cap_stem'); top y1=h; bot y2=0;
+filldraw stroke z1e--z2e; % stem
+penpos3(cap_band,90); penpos4(cap_band,90);
+penpos5(cap_curve if hefty:-3stem_corr fi,0);
+penpos6(vair,-90); penpos7(vair,-90);
+z3r=top z1; y4=y3; y5=.5[y4l,y6l]; y6=y7;
+x7=x2; y7l=vround(.5h+.5vair); x4=x6;
+if serifs: x4=.5w-.5u; x5r=hround(w-2.25u);
+else: x4=.5w+.5u; x5r=hround(w-u); fi
+x4l:=x6l:=x4-.125cap_curve;
+fill stroke z3e..pulled_arc.e(4,5) & pulled_arc.e(5,6)..z7e; % lobe
+if serifs: pos6'(vair,-90); pos0(cap_stem,180);
+ pos8(cap_curve,180); pos9(vair,-90); pos10(hair,0);
+ z6'=z6; lft x0r=lft x8r=hround(x5-2/3u-.5cap_curve);
+ y8=1/3[y2,y7]; y0=3/5[y2,y7]; x9=.5[x8l,x10r];
+ bot y9r=-o; rt x10r=hround(w-.05u); y10=1/4[y2,y7];
+ filldraw stroke z6'e{right}..z0e---z8e....z9e{right}..z10e{up}; % tail
+ dish_serif(2,1,c,1/3,cap_jut,d,1/3,cap_jut); % lower serif
+else: penpos8(cap_stem-2stem_corr,0); penpos9(cap_stem,0);
+ x8=x6+.5u; y8=y6; x9r=hround(w-.5u); y9=0;
+ fill z8l--diag_end(8l,9l,.5,1,9r,8r)--z8r--cycle; fi % tail
+left_stem=if monospace:fudged.hair else: cap_hair fi if hefty: -3stem_corr fi;
+outer_jut=.8cap_jut; x11l=l+letter_fit+outer_jut+.5u; y11=0;
+x12=x1l-apex_corr-if monospace:2 fi\\u; y12=h;
+alpha=diag_ratio(1,.5left_stem,y12-y11,x12-x11l);
+penpos11(alpha*left_stem,0); penpos12(alpha*left_stem,0);
+fill diag_end(12l,11l,1,1,11r,12r)
+ --diag_end(11r,12r,1,1,12l,11l)--cycle; % diagonal
+y15=h-slab; z15=whatever[z11,z12];
+fill z15--(x1,y15)--(x1,h)--z12--cycle; % link
+penpos13(whatever,angle(z2-z1)); z13=whatever[z11,z12];
+penpos14(cap_band,90); x14=x7; y13l=y14l; y13r=y14r;
+if hefty: y14r=.4h; else: y14=y7; fi
+penstroke z13e--z14e; % bar line
+if serifs: numeric inner_jut; pickup tiny.nib;
+ prime_points_inside(11,12);
+ if rt x11'r+cap_jut+.5u+1<=lft x2l-.75cap_jut:
+ inner_jut=cap_jut;
+ else:
+ rt x11'r+inner_jut+.5u+1=lft x2l-.75inner_jut;
+ fi
+ dish_serif(11',12,i,1/2,outer_jut,j,.6,inner_jut)(dark); % lower left serif
+ nodish_serif(1,2,a,1/3,cap_jut+x1l-x12,b,1/3,.5cap_jut); % upper serif
+fi
+math_fit(0,.75ic#);
+penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); endchar;
+
+font_slant slant; font_x_height x_height#;
+if monospace: font_normal_space 9u#; % no stretching or shrinking
+ font_quad 18u#;
+ font_extra_space 9u#;
+else: font_normal_space 6u#+2letter_fit#;
+ font_normal_stretch 3u#; font_normal_shrink 2u#;
+ font_quad 18u#+4letter_fit#;
+ font_extra_space 2u#;
+fi
+
+bye.
+
diff --git a/macros/latex/contrib/aspectratio/arb10.pfb b/macros/latex/contrib/aspectratio/arb10.pfb
new file mode 100644
index 0000000000..b802db45ec
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/arb10.pfb
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/arb10.tfm b/macros/latex/contrib/aspectratio/arb10.tfm
new file mode 100644
index 0000000000..a6f661ca87
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/arb10.tfm
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/arb12.mf b/macros/latex/contrib/aspectratio/arb12.mf
new file mode 100644
index 0000000000..edf417b8cc
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/arb12.mf
@@ -0,0 +1,143 @@
+% Computer Modern Bold Extended Text Italic 12 point
+if unknown cmbase: input cmbase fi
+
+font_identifier:="AR"; font_size 12pt#;
+
+u#:=27/36pt#; % unit width
+width_adj#:=13/36pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=8/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=13/36pt#; % extra space added to all sidebars
+
+body_height#:=324/36pt#; % height of tallest characters
+asc_height#:=300/36pt#; % height of lowercase ascenders
+cap_height#:=296.4/36pt#; % height of caps
+fig_height#:=278.4/36pt#; % height of numerals
+x_height#:=192/36pt#; % height of lowercase without ascenders
+math_axis#:=108/36pt#; % axis of symmetry for math symbols
+bar_height#:=102/36pt#; % height of crossbar in lowercase e
+comma_depth#:=84/36pt#; % depth of comma below baseline
+desc_depth#:=84/36pt#; % depth of lowercase descenders
+
+crisp#:=1pt#; % diameter of serif corners
+tiny#:=13/36pt#; % diameter of rounded corners
+fine#:=10/36pt#; % diameter of sharply rounded corners
+thin_join#:=10.5/36pt#; % width of extrafine details
+hair#:=20/36pt#; % lowercase hairline breadth
+stem#:=44/36pt#; % lowercase stem breadth
+curve#:=49/36pt#; % lowercase curve breadth
+ess#:=41/36pt#; % breadth in middle of lowercase s
+flare#:=48/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=59/36pt#; % diameter of dots
+cap_hair#:=17/36pt#; % uppercase hairline breadth
+cap_stem#:=54/36pt#; % uppercase stem breadth
+cap_curve#:=58/36pt#; % uppercase curve breadth
+cap_ess#:=56/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.66pt#; % thickness of lines in math symbols
+
+dish#:=1/36pt#; % amount erased at top or bottom of serifs
+bracket#:=12/36pt#; % vertical distance from serif base to tangent
+jut#:=30/36pt#; % protrusion of lowercase serifs
+cap_jut#:=46/36pt#; % protrusion of uppercase serifs
+beak_jut#:=12.4/36pt#; % horizontal protrusion of beak serifs
+beak#:=84/36pt#; % vertical protrusion of beak serifs
+vair#:=14.3/36pt#; % vertical diameter of hairlines
+notch_cut#:=12pt#; % maximum breadth above or below notches
+bar#:=18.5/36pt#; % lowercase bar thickness
+slab#:=18.5/36pt#; % serif and arm thickness
+cap_bar#:=18.5/36pt#; % uppercase bar thickness
+cap_band#:=18.5/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=12pt#; % max breadth above/below uppercase notches
+serif_drop#:=3.6/36pt#; % vertical drop of sloped serifs
+stem_corr#:=2/36pt#; % for small refinements of stem breadth
+vair_corr#:=1.5/36pt#; % for small refinements of hairline height
+apex_corr#:=0pt#; % extra width at diagonal junctions
+
+o#:=5/36pt#; % amount of overshoot for curves
+apex_o#:=4/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:=.4; % extra openness of math symbols
+superness:=8/11; % parameter for superellipses
+superpull:=1/8; % extra openness inside bowls
+beak_darkness:=.4; % 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?
+
+mode_setup; font_setup;
+
+
+cmchar "The ligature AR";
+beginchar("A",if serifs: 12u#+.5max(2u#,cap_curve#)
+ else:12.5u#-.5width_adj# fi,cap_height#,0);
+italcorr .75cap_height#*slant- if serifs: 1.75 else: .5 fi\\ u#;
+adjust_fit(6u#+cap_serif_fit#,0);
+pickup tiny.nib; pos1(cap_stem',0); pos2(cap_stem',0);
+lft x1l=lft x2l=hround max(2u,3u-.5cap_stem'); top y1=h; bot y2=0;
+filldraw stroke z1e--z2e; % stem
+penpos3(cap_band,90); penpos4(cap_band,90);
+penpos5(cap_curve if hefty:-3stem_corr fi,0);
+penpos6(vair,-90); penpos7(vair,-90);
+z3r=top z1; y4=y3; y5=.5[y4l,y6l]; y6=y7;
+x7=x2; y7l=vround(.5h+.5vair); x4=x6;
+if serifs: x4=.5w-.5u; x5r=hround(w-2.25u);
+else: x4=.5w+.5u; x5r=hround(w-u); fi
+x4l:=x6l:=x4-.125cap_curve;
+fill stroke z3e..pulled_arc.e(4,5) & pulled_arc.e(5,6)..z7e; % lobe
+if serifs: pos6'(vair,-90); pos0(cap_stem,180);
+ pos8(cap_curve,180); pos9(vair,-90); pos10(hair,0);
+ z6'=z6; lft x0r=lft x8r=hround(x5-2/3u-.5cap_curve);
+ y8=1/3[y2,y7]; y0=3/5[y2,y7]; x9=.5[x8l,x10r];
+ bot y9r=-o; rt x10r=hround(w-.05u); y10=1/4[y2,y7];
+ filldraw stroke z6'e{right}..z0e---z8e....z9e{right}..z10e{up}; % tail
+ dish_serif(2,1,c,1/3,cap_jut,d,1/3,cap_jut); % lower serif
+else: penpos8(cap_stem-2stem_corr,0); penpos9(cap_stem,0);
+ x8=x6+.5u; y8=y6; x9r=hround(w-.5u); y9=0;
+ fill z8l--diag_end(8l,9l,.5,1,9r,8r)--z8r--cycle; fi % tail
+left_stem=if monospace:fudged.hair else: cap_hair fi if hefty: -3stem_corr fi;
+outer_jut=.8cap_jut; x11l=l+letter_fit+outer_jut+.5u; y11=0;
+x12=x1l-apex_corr-if monospace:2 fi\\u; y12=h;
+alpha=diag_ratio(1,.5left_stem,y12-y11,x12-x11l);
+penpos11(alpha*left_stem,0); penpos12(alpha*left_stem,0);
+fill diag_end(12l,11l,1,1,11r,12r)
+ --diag_end(11r,12r,1,1,12l,11l)--cycle; % diagonal
+y15=h-slab; z15=whatever[z11,z12];
+fill z15--(x1,y15)--(x1,h)--z12--cycle; % link
+penpos13(whatever,angle(z2-z1)); z13=whatever[z11,z12];
+penpos14(cap_band,90); x14=x7; y13l=y14l; y13r=y14r;
+if hefty: y14r=.4h; else: y14=y7; fi
+penstroke z13e--z14e; % bar line
+if serifs: numeric inner_jut; pickup tiny.nib;
+ prime_points_inside(11,12);
+ if rt x11'r+cap_jut+.5u+1<=lft x2l-.75cap_jut:
+ inner_jut=cap_jut;
+ else:
+ rt x11'r+inner_jut+.5u+1=lft x2l-.75inner_jut;
+ fi
+ dish_serif(11',12,i,1/2,outer_jut,j,.6,inner_jut)(dark); % lower left serif
+ nodish_serif(1,2,a,1/3,cap_jut+x1l-x12,b,1/3,.5cap_jut); % upper serif
+fi
+math_fit(0,.75ic#);
+penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); endchar;
+
+font_slant slant; font_x_height x_height#;
+if monospace: font_normal_space 9u#; % no stretching or shrinking
+ font_quad 18u#;
+ font_extra_space 9u#;
+else: font_normal_space 6u#+2letter_fit#;
+ font_normal_stretch 3u#; font_normal_shrink 2u#;
+ font_quad 18u#+4letter_fit#;
+ font_extra_space 2u#;
+fi
+
+bye.
+
+
diff --git a/macros/latex/contrib/aspectratio/arb12.pfb b/macros/latex/contrib/aspectratio/arb12.pfb
new file mode 100644
index 0000000000..7049cf9994
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/arb12.pfb
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/arb12.tfm b/macros/latex/contrib/aspectratio/arb12.tfm
new file mode 100644
index 0000000000..ccf0bc1530
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/arb12.tfm
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/arb5.mf b/macros/latex/contrib/aspectratio/arb5.mf
new file mode 100644
index 0000000000..ae058246d0
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/arb5.mf
@@ -0,0 +1,145 @@
+% Computer Modern Bold Extended Italic 5 point
+if unknown cmbase: input cmbase fi
+
+font_identifier:="ARB"; font_size 5pt#;
+
+
+u#:=14.5/36pt#; % unit width
+width_adj#:=7/36pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=3/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=6/36pt#; % extra space added to all sidebars
+
+body_height#:=135/36pt#; % height of tallest characters
+asc_height#:=125/36pt#; % height of lowercase ascenders
+cap_height#:=123.5/36pt#; % height of caps
+fig_height#:=116/36pt#; % height of numerals
+x_height#:=80/36pt#; % height of lowercase without ascenders
+math_axis#:=45/36pt#; % axis of symmetry for math symbols
+bar_height#:=40/36pt#; % height of crossbar in lowercase e
+comma_depth#:=35/36pt#; % depth of comma below baseline
+desc_depth#:=35/36pt#; % depth of lowercase descenders
+
+crisp#:=1pt#; % diameter of serif corners
+tiny#:=9/36pt#; % diameter of rounded corners
+fine#:=8/36pt#; % diameter of sharply rounded corners
+thin_join#:=8/36pt#; % width of extrafine details
+hair#:=16/36pt#; % lowercase hairline breadth
+stem#:=23/36pt#; % lowercase stem breadth
+curve#:=26/36pt#; % lowercase curve breadth
+ess#:=18/36pt#; % breadth in middle of lowercase s
+flare#:=26/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=30/36pt#; % diameter of dots
+cap_hair#:=16/36pt#; % uppercase hairline breadth
+cap_stem#:=27/36pt#; % uppercase stem breadth
+cap_curve#:=30/36pt#; % uppercase curve breadth
+cap_ess#:=23/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.43pt#; % thickness of lines in math symbols
+
+dish#:=.7/36pt#; % amount erased at top or bottom of serifs
+bracket#:=5/36pt#; % vertical distance from serif base to tangent
+jut#:=13/36pt#; % protrusion of lowercase serifs
+cap_jut#:=19/36pt#; % protrusion of uppercase serifs
+beak_jut#:=7/36pt#; % horizontal protrusion of beak serifs
+beak#:=25/36pt#; % vertical protrusion of beak serifs
+vair#:=10/36pt#; % vertical diameter of hairlines
+notch_cut#:=5pt#; % maximum breadth above or below notches
+bar#:=12/36pt#; % lowercase bar thickness
+slab#:=12/36pt#; % serif and arm thickness
+cap_bar#:=12/36pt#; % uppercase bar thickness
+cap_band#:=12/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=5pt#; % max breadth above/below uppercase notches
+serif_drop#:=1.5/36pt#; % vertical drop of sloped serifs
+stem_corr#:=1.5/36pt#; % for small refinements of stem breadth
+vair_corr#:=1/36pt#; % for small refinements of hairline height
+apex_corr#:=9/36pt#; % extra width at diagonal junctions
+
+o#:=3/36pt#; % amount of overshoot for curves
+apex_o#:=3/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:=1.5; % extra openness of math symbols
+superness:=8/11; % parameter for superellipses
+superpull:=1/8; % extra openness inside bowls
+beak_darkness:=.4; % 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?
+
+
+mode_setup; font_setup;
+
+
+cmchar "The ligature AR";
+beginchar("A",if serifs: 12u#+.5max(2u#,cap_curve#)
+ else:12.5u#-.5width_adj# fi,cap_height#,0);
+italcorr .75cap_height#*slant- if serifs: 1.75 else: .5 fi\\ u#;
+adjust_fit(6u#+cap_serif_fit#,0);
+pickup tiny.nib; pos1(cap_stem',0); pos2(cap_stem',0);
+lft x1l=lft x2l=hround max(2u,3u-.5cap_stem'); top y1=h; bot y2=0;
+filldraw stroke z1e--z2e; % stem
+penpos3(cap_band,90); penpos4(cap_band,90);
+penpos5(cap_curve if hefty:-3stem_corr fi,0);
+penpos6(vair,-90); penpos7(vair,-90);
+z3r=top z1; y4=y3; y5=.5[y4l,y6l]; y6=y7;
+x7=x2; y7l=vround(.5h+.5vair); x4=x6;
+if serifs: x4=.5w-.5u; x5r=hround(w-2.25u);
+else: x4=.5w+.5u; x5r=hround(w-u); fi
+x4l:=x6l:=x4-.125cap_curve;
+fill stroke z3e..pulled_arc.e(4,5) & pulled_arc.e(5,6)..z7e; % lobe
+if serifs: pos6'(vair,-90); pos0(cap_stem,180);
+ pos8(cap_curve,180); pos9(vair,-90); pos10(hair,0);
+ z6'=z6; lft x0r=lft x8r=hround(x5-2/3u-.5cap_curve);
+ y8=1/3[y2,y7]; y0=3/5[y2,y7]; x9=.5[x8l,x10r];
+ bot y9r=-o; rt x10r=hround(w-.05u); y10=1/4[y2,y7];
+ filldraw stroke z6'e{right}..z0e---z8e....z9e{right}..z10e{up}; % tail
+ dish_serif(2,1,c,1/3,cap_jut,d,1/3,cap_jut); % lower serif
+else: penpos8(cap_stem-2stem_corr,0); penpos9(cap_stem,0);
+ x8=x6+.5u; y8=y6; x9r=hround(w-.5u); y9=0;
+ fill z8l--diag_end(8l,9l,.5,1,9r,8r)--z8r--cycle; fi % tail
+left_stem=if monospace:fudged.hair else: cap_hair fi if hefty: -3stem_corr fi;
+outer_jut=.8cap_jut; x11l=l+letter_fit+outer_jut+.5u; y11=0;
+x12=x1l-apex_corr-if monospace:2 fi\\u; y12=h;
+alpha=diag_ratio(1,.5left_stem,y12-y11,x12-x11l);
+penpos11(alpha*left_stem,0); penpos12(alpha*left_stem,0);
+fill diag_end(12l,11l,1,1,11r,12r)
+ --diag_end(11r,12r,1,1,12l,11l)--cycle; % diagonal
+y15=h-slab; z15=whatever[z11,z12];
+fill z15--(x1,y15)--(x1,h)--z12--cycle; % link
+penpos13(whatever,angle(z2-z1)); z13=whatever[z11,z12];
+penpos14(cap_band,90); x14=x7; y13l=y14l; y13r=y14r;
+if hefty: y14r=.4h; else: y14=y7; fi
+penstroke z13e--z14e; % bar line
+if serifs: numeric inner_jut; pickup tiny.nib;
+ prime_points_inside(11,12);
+ if rt x11'r+cap_jut+.5u+1<=lft x2l-.75cap_jut:
+ inner_jut=cap_jut;
+ else:
+ rt x11'r+inner_jut+.5u+1=lft x2l-.75inner_jut;
+ fi
+ dish_serif(11',12,i,1/2,outer_jut,j,.6,inner_jut)(dark); % lower left serif
+ nodish_serif(1,2,a,1/3,cap_jut+x1l-x12,b,1/3,.5cap_jut); % upper serif
+fi
+math_fit(0,.75ic#);
+penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); endchar;
+
+font_slant slant; font_x_height x_height#;
+if monospace: font_normal_space 9u#; % no stretching or shrinking
+ font_quad 18u#;
+ font_extra_space 9u#;
+else: font_normal_space 6u#+2letter_fit#;
+ font_normal_stretch 3u#; font_normal_shrink 2u#;
+ font_quad 18u#+4letter_fit#;
+ font_extra_space 2u#;
+fi
+
+bye.
+
+
diff --git a/macros/latex/contrib/aspectratio/arb5.pfb b/macros/latex/contrib/aspectratio/arb5.pfb
new file mode 100644
index 0000000000..adb0ea2f83
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/arb5.pfb
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/arb5.tfm b/macros/latex/contrib/aspectratio/arb5.tfm
new file mode 100644
index 0000000000..bd316e5171
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/arb5.tfm
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/arb6.mf b/macros/latex/contrib/aspectratio/arb6.mf
new file mode 100644
index 0000000000..05de2ee369
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/arb6.mf
@@ -0,0 +1,144 @@
+% Computer Modern Bold Extended Italic 6 point
+if unknown cmbase: input cmbase fi
+
+font_identifier:="ARB"; font_size 6pt#;
+
+u#:=16.2/36pt#; % unit width
+width_adj#:=7.8/36pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=3.8/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=7/36pt#; % extra space added to all sidebars
+
+body_height#:=162/36pt#; % height of tallest characters
+asc_height#:=150/36pt#; % height of lowercase ascenders
+cap_height#:=148.2/36pt#; % height of caps
+fig_height#:=139.2/36pt#; % height of numerals
+x_height#:=96/36pt#; % height of lowercase without ascenders
+math_axis#:=54/36pt#; % axis of symmetry for math symbols
+bar_height#:=49/36pt#; % height of crossbar in lowercase e
+comma_depth#:=42/36pt#; % depth of comma below baseline
+desc_depth#:=42/36pt#; % depth of lowercase descenders
+
+crisp#:=0pt#; % diameter of serif corners
+tiny#:=10/36pt#; % diameter of rounded corners
+fine#:=9/36pt#; % diameter of sharply rounded corners
+thin_join#:=9/36pt#; % width of extrafine details
+hair#:=16.5/36pt#; % lowercase hairline breadth
+stem#:=26/36pt#; % lowercase stem breadth
+curve#:=29/36pt#; % lowercase curve breadth
+ess#:=23/36pt#; % breadth in middle of lowercase s
+flare#:=29/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=34/36pt#; % diameter of dots
+cap_hair#:=16/36pt#; % uppercase hairline breadth
+cap_stem#:=31/36pt#; % uppercase stem breadth
+cap_curve#:=34/36pt#; % uppercase curve breadth
+cap_ess#:=29/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.47pt#; % thickness of lines in math symbols
+
+dish#:=.8/36pt#; % amount erased at top or bottom of serifs
+bracket#:=6/36pt#; % vertical distance from serif base to tangent
+jut#:=15/36pt#; % protrusion of lowercase serifs
+cap_jut#:=23/36pt#; % protrusion of uppercase serifs
+beak_jut#:=7.8/36pt#; % horizontal protrusion of beak serifs
+beak#:=36/36pt#; % vertical protrusion of beak serifs
+vair#:=11/36pt#; % vertical diameter of hairlines
+notch_cut#:=6pt#; % maximum breadth above or below notches
+bar#:=13/36pt#; % lowercase bar thickness
+slab#:=13/36pt#; % serif and arm thickness
+cap_bar#:=13/36pt#; % uppercase bar thickness
+cap_band#:=13/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=6pt#; % max breadth above/below uppercase notches
+serif_drop#:=1.8/36pt#; % vertical drop of sloped serifs
+stem_corr#:=1.6/36pt#; % for small refinements of stem breadth
+vair_corr#:=1.1/36pt#; % for small refinements of hairline height
+apex_corr#:=5/36pt#; % extra width at diagonal junctions
+
+o#:=3/36pt#; % amount of overshoot for curves
+apex_o#:=3/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:=1.3; % extra openness of math symbols
+superness:=8/11; % parameter for superellipses
+superpull:=1/8; % extra openness inside bowls
+beak_darkness:=.4; % 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?
+
+mode_setup; font_setup;
+
+
+cmchar "The ligature AR";
+beginchar("A",if serifs: 12u#+.5max(2u#,cap_curve#)
+ else:12.5u#-.5width_adj# fi,cap_height#,0);
+italcorr .75cap_height#*slant- if serifs: 1.75 else: .5 fi\\ u#;
+adjust_fit(6u#+cap_serif_fit#,0);
+pickup tiny.nib; pos1(cap_stem',0); pos2(cap_stem',0);
+lft x1l=lft x2l=hround max(2u,3u-.5cap_stem'); top y1=h; bot y2=0;
+filldraw stroke z1e--z2e; % stem
+penpos3(cap_band,90); penpos4(cap_band,90);
+penpos5(cap_curve if hefty:-3stem_corr fi,0);
+penpos6(vair,-90); penpos7(vair,-90);
+z3r=top z1; y4=y3; y5=.5[y4l,y6l]; y6=y7;
+x7=x2; y7l=vround(.5h+.5vair); x4=x6;
+if serifs: x4=.5w-.5u; x5r=hround(w-2.25u);
+else: x4=.5w+.5u; x5r=hround(w-u); fi
+x4l:=x6l:=x4-.125cap_curve;
+fill stroke z3e..pulled_arc.e(4,5) & pulled_arc.e(5,6)..z7e; % lobe
+if serifs: pos6'(vair,-90); pos0(cap_stem,180);
+ pos8(cap_curve,180); pos9(vair,-90); pos10(hair,0);
+ z6'=z6; lft x0r=lft x8r=hround(x5-2/3u-.5cap_curve);
+ y8=1/3[y2,y7]; y0=3/5[y2,y7]; x9=.5[x8l,x10r];
+ bot y9r=-o; rt x10r=hround(w-.05u); y10=1/4[y2,y7];
+ filldraw stroke z6'e{right}..z0e---z8e....z9e{right}..z10e{up}; % tail
+ dish_serif(2,1,c,1/3,cap_jut,d,1/3,cap_jut); % lower serif
+else: penpos8(cap_stem-2stem_corr,0); penpos9(cap_stem,0);
+ x8=x6+.5u; y8=y6; x9r=hround(w-.5u); y9=0;
+ fill z8l--diag_end(8l,9l,.5,1,9r,8r)--z8r--cycle; fi % tail
+left_stem=if monospace:fudged.hair else: cap_hair fi if hefty: -3stem_corr fi;
+outer_jut=.8cap_jut; x11l=l+letter_fit+outer_jut+.5u; y11=0;
+x12=x1l-apex_corr-if monospace:2 fi\\u; y12=h;
+alpha=diag_ratio(1,.5left_stem,y12-y11,x12-x11l);
+penpos11(alpha*left_stem,0); penpos12(alpha*left_stem,0);
+fill diag_end(12l,11l,1,1,11r,12r)
+ --diag_end(11r,12r,1,1,12l,11l)--cycle; % diagonal
+y15=h-slab; z15=whatever[z11,z12];
+fill z15--(x1,y15)--(x1,h)--z12--cycle; % link
+penpos13(whatever,angle(z2-z1)); z13=whatever[z11,z12];
+penpos14(cap_band,90); x14=x7; y13l=y14l; y13r=y14r;
+if hefty: y14r=.4h; else: y14=y7; fi
+penstroke z13e--z14e; % bar line
+if serifs: numeric inner_jut; pickup tiny.nib;
+ prime_points_inside(11,12);
+ if rt x11'r+cap_jut+.5u+1<=lft x2l-.75cap_jut:
+ inner_jut=cap_jut;
+ else:
+ rt x11'r+inner_jut+.5u+1=lft x2l-.75inner_jut;
+ fi
+ dish_serif(11',12,i,1/2,outer_jut,j,.6,inner_jut)(dark); % lower left serif
+ nodish_serif(1,2,a,1/3,cap_jut+x1l-x12,b,1/3,.5cap_jut); % upper serif
+fi
+math_fit(0,.75ic#);
+penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); endchar;
+
+font_slant slant; font_x_height x_height#;
+if monospace: font_normal_space 9u#; % no stretching or shrinking
+ font_quad 18u#;
+ font_extra_space 9u#;
+else: font_normal_space 6u#+2letter_fit#;
+ font_normal_stretch 3u#; font_normal_shrink 2u#;
+ font_quad 18u#+4letter_fit#;
+ font_extra_space 2u#;
+fi
+
+bye.
+
+
+
diff --git a/macros/latex/contrib/aspectratio/arb6.pfb b/macros/latex/contrib/aspectratio/arb6.pfb
new file mode 100644
index 0000000000..42decd1481
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/arb6.pfb
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/arb6.tfm b/macros/latex/contrib/aspectratio/arb6.tfm
new file mode 100644
index 0000000000..dcbc27e5af
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/arb6.tfm
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/arb7.mf b/macros/latex/contrib/aspectratio/arb7.mf
new file mode 100644
index 0000000000..f506d5a1ba
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/arb7.mf
@@ -0,0 +1,145 @@
+% Computer Modern Bold Extended Italic 7 point
+if unknown cmbase: input cmbase fi
+
+font_identifier:="ARB"; font_size 7pt#;
+
+u#:=17.9/36pt#; % unit width
+width_adj#:=8.6/36pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=4.6/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=8/36pt#; % extra space added to all sidebars
+
+body_height#:=189/36pt#; % height of tallest characters
+asc_height#:=175/36pt#; % height of lowercase ascenders
+cap_height#:=172.9/36pt#; % height of caps
+fig_height#:=162.4/36pt#; % height of numerals
+x_height#:=112/36pt#; % height of lowercase without ascenders
+math_axis#:=63/36pt#; % axis of symmetry for math symbols
+bar_height#:=58/36pt#; % height of crossbar in lowercase e
+comma_depth#:=49/36pt#; % depth of comma below baseline
+desc_depth#:=49/36pt#; % depth of lowercase descenders
+
+crisp#:=0pt#; % diameter of serif corners
+tiny#:=11/36pt#; % diameter of rounded corners
+fine#:=9/36pt#; % diameter of sharply rounded corners
+thin_join#:=9/36pt#; % width of extrafine details
+hair#:=17/36pt#; % lowercase hairline breadth
+stem#:=30/36pt#; % lowercase stem breadth
+curve#:=32/36pt#; % lowercase curve breadth
+ess#:=27/36pt#; % breadth in middle of lowercase s
+flare#:=33/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=39/36pt#; % diameter of dots
+cap_hair#:=16/36pt#; % uppercase hairline breadth
+cap_stem#:=36/36pt#; % uppercase stem breadth
+cap_curve#:=39/36pt#; % uppercase curve breadth
+cap_ess#:=35/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.51pt#; % thickness of lines in math symbols
+
+dish#:=.9/36pt#; % amount erased at top or bottom of serifs
+bracket#:=7/36pt#; % vertical distance from serif base to tangent
+jut#:=17/36pt#; % protrusion of lowercase serifs
+cap_jut#:=27/36pt#; % protrusion of uppercase serifs
+beak_jut#:=8.6/36pt#; % horizontal protrusion of beak serifs
+beak#:=46/36pt#; % vertical protrusion of beak serifs
+vair#:=11.5/36pt#; % vertical diameter of hairlines
+notch_cut#:=7pt#; % maximum breadth above or below notches
+bar#:=14/36pt#; % lowercase bar thickness
+slab#:=14/36pt#; % serif and arm thickness
+cap_bar#:=14/36pt#; % uppercase bar thickness
+cap_band#:=14/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=7pt#; % max breadth above/below uppercase notches
+serif_drop#:=2.1/36pt#; % vertical drop of sloped serifs
+stem_corr#:=1.7/36pt#; % for small refinements of stem breadth
+vair_corr#:=1.2/36pt#; % for small refinements of hairline height
+apex_corr#:=2/36pt#; % extra width at diagonal junctions
+
+o#:=3/36pt#; % amount of overshoot for curves
+apex_o#:=3/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:=1.1; % extra openness of math symbols
+superness:=8/11; % parameter for superellipses
+superpull:=1/8; % extra openness inside bowls
+beak_darkness:=.4; % 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?
+
+mode_setup; font_setup;
+
+
+cmchar "The ligature AR";
+beginchar("A",if serifs: 12u#+.5max(2u#,cap_curve#)
+ else:12.5u#-.5width_adj# fi,cap_height#,0);
+italcorr .75cap_height#*slant- if serifs: 1.75 else: .5 fi\\ u#;
+adjust_fit(6u#+cap_serif_fit#,0);
+pickup tiny.nib; pos1(cap_stem',0); pos2(cap_stem',0);
+lft x1l=lft x2l=hround max(2u,3u-.5cap_stem'); top y1=h; bot y2=0;
+filldraw stroke z1e--z2e; % stem
+penpos3(cap_band,90); penpos4(cap_band,90);
+penpos5(cap_curve if hefty:-3stem_corr fi,0);
+penpos6(vair,-90); penpos7(vair,-90);
+z3r=top z1; y4=y3; y5=.5[y4l,y6l]; y6=y7;
+x7=x2; y7l=vround(.5h+.5vair); x4=x6;
+if serifs: x4=.5w-.5u; x5r=hround(w-2.25u);
+else: x4=.5w+.5u; x5r=hround(w-u); fi
+x4l:=x6l:=x4-.125cap_curve;
+fill stroke z3e..pulled_arc.e(4,5) & pulled_arc.e(5,6)..z7e; % lobe
+if serifs: pos6'(vair,-90); pos0(cap_stem,180);
+ pos8(cap_curve,180); pos9(vair,-90); pos10(hair,0);
+ z6'=z6; lft x0r=lft x8r=hround(x5-2/3u-.5cap_curve);
+ y8=1/3[y2,y7]; y0=3/5[y2,y7]; x9=.5[x8l,x10r];
+ bot y9r=-o; rt x10r=hround(w-.05u); y10=1/4[y2,y7];
+ filldraw stroke z6'e{right}..z0e---z8e....z9e{right}..z10e{up}; % tail
+ dish_serif(2,1,c,1/3,cap_jut,d,1/3,cap_jut); % lower serif
+else: penpos8(cap_stem-2stem_corr,0); penpos9(cap_stem,0);
+ x8=x6+.5u; y8=y6; x9r=hround(w-.5u); y9=0;
+ fill z8l--diag_end(8l,9l,.5,1,9r,8r)--z8r--cycle; fi % tail
+left_stem=if monospace:fudged.hair else: cap_hair fi if hefty: -3stem_corr fi;
+outer_jut=.8cap_jut; x11l=l+letter_fit+outer_jut+.5u; y11=0;
+x12=x1l-apex_corr-if monospace:2 fi\\u; y12=h;
+alpha=diag_ratio(1,.5left_stem,y12-y11,x12-x11l);
+penpos11(alpha*left_stem,0); penpos12(alpha*left_stem,0);
+fill diag_end(12l,11l,1,1,11r,12r)
+ --diag_end(11r,12r,1,1,12l,11l)--cycle; % diagonal
+y15=h-slab; z15=whatever[z11,z12];
+fill z15--(x1,y15)--(x1,h)--z12--cycle; % link
+penpos13(whatever,angle(z2-z1)); z13=whatever[z11,z12];
+penpos14(cap_band,90); x14=x7; y13l=y14l; y13r=y14r;
+if hefty: y14r=.4h; else: y14=y7; fi
+penstroke z13e--z14e; % bar line
+if serifs: numeric inner_jut; pickup tiny.nib;
+ prime_points_inside(11,12);
+ if rt x11'r+cap_jut+.5u+1<=lft x2l-.75cap_jut:
+ inner_jut=cap_jut;
+ else:
+ rt x11'r+inner_jut+.5u+1=lft x2l-.75inner_jut;
+ fi
+ dish_serif(11',12,i,1/2,outer_jut,j,.6,inner_jut)(dark); % lower left serif
+ nodish_serif(1,2,a,1/3,cap_jut+x1l-x12,b,1/3,.5cap_jut); % upper serif
+fi
+math_fit(0,.75ic#);
+penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); endchar;
+
+font_slant slant; font_x_height x_height#;
+if monospace: font_normal_space 9u#; % no stretching or shrinking
+ font_quad 18u#;
+ font_extra_space 9u#;
+else: font_normal_space 6u#+2letter_fit#;
+ font_normal_stretch 3u#; font_normal_shrink 2u#;
+ font_quad 18u#+4letter_fit#;
+ font_extra_space 2u#;
+fi
+
+bye.
+
+
+
+
diff --git a/macros/latex/contrib/aspectratio/arb7.pfb b/macros/latex/contrib/aspectratio/arb7.pfb
new file mode 100644
index 0000000000..f989ac9641
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/arb7.pfb
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/arb7.tfm b/macros/latex/contrib/aspectratio/arb7.tfm
new file mode 100644
index 0000000000..0b8aa7ccf6
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/arb7.tfm
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/arb8.mf b/macros/latex/contrib/aspectratio/arb8.mf
new file mode 100644
index 0000000000..12e4acbdbd
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/arb8.mf
@@ -0,0 +1,143 @@
+% Computer Modern Bold Extended Italic 8 point
+if unknown cmbase: input cmbase fi
+
+font_identifier:="ARB"; font_size 8pt#;
+
+u#:=19.6/36pt#; % unit width
+width_adj#:=9.4/36pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5.4/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=9/36pt#; % extra space added to all sidebars
+
+body_height#:=216/36pt#; % height of tallest characters
+asc_height#:=200/36pt#; % height of lowercase ascenders
+cap_height#:=197.6/36pt#; % height of caps
+fig_height#:=185.6/36pt#; % height of numerals
+x_height#:=128/36pt#; % height of lowercase without ascenders
+math_axis#:=72/36pt#; % axis of symmetry for math symbols
+bar_height#:=67/36pt#; % height of crossbar in lowercase e
+comma_depth#:=56/36pt#; % depth of comma below baseline
+desc_depth#:=56/36pt#; % depth of lowercase descenders
+
+crisp#:=0pt#; % diameter of serif corners
+tiny#:=12/36pt#; % diameter of rounded corners
+fine#:=10/36pt#; % diameter of sharply rounded corners
+thin_join#:=10/36pt#; % width of extrafine details
+hair#:=18/36pt#; % lowercase hairline breadth
+stem#:=32/36pt#; % lowercase stem breadth
+curve#:=36/36pt#; % lowercase curve breadth
+ess#:=30/36pt#; % breadth in middle of lowercase s
+flare#:=36/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=43/36pt#; % diameter of dots
+cap_hair#:=16/36pt#; % uppercase hairline breadth
+cap_stem#:=40/36pt#; % uppercase stem breadth
+cap_curve#:=43/36pt#; % uppercase curve breadth
+cap_ess#:=40/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.54pt#; % thickness of lines in math symbols
+
+dish#:=1/36pt#; % amount erased at top or bottom of serifs
+bracket#:=8/36pt#; % vertical distance from serif base to tangent
+jut#:=19/36pt#; % protrusion of lowercase serifs
+cap_jut#:=31/36pt#; % protrusion of uppercase serifs
+beak_jut#:=9.4/36pt#; % horizontal protrusion of beak serifs
+beak#:=55/36pt#; % vertical protrusion of beak serifs
+vair#:=12/36pt#; % vertical diameter of hairlines
+notch_cut#:=8pt#; % maximum breadth above or below notches
+bar#:=15/36pt#; % lowercase bar thickness
+slab#:=15/36pt#; % serif and arm thickness
+cap_bar#:=15/36pt#; % uppercase bar thickness
+cap_band#:=15/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=8pt#; % max breadth above/below uppercase notches
+serif_drop#:=2.4/36pt#; % vertical drop of sloped serifs
+stem_corr#:=1.8/36pt#; % for small refinements of stem breadth
+vair_corr#:=1.3/36pt#; % for small refinements of hairline height
+apex_corr#:=0pt#; % extra width at diagonal junctions
+
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=3/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:=.9; % extra openness of math symbols
+superness:=8/11; % parameter for superellipses
+superpull:=1/8; % extra openness inside bowls
+beak_darkness:=.4; % 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?
+
+mode_setup; font_setup;
+
+
+cmchar "The ligature AR";
+beginchar("A",if serifs: 12u#+.5max(2u#,cap_curve#)
+ else:12.5u#-.5width_adj# fi,cap_height#,0);
+italcorr .75cap_height#*slant- if serifs: 1.75 else: .5 fi\\ u#;
+adjust_fit(6u#+cap_serif_fit#,0);
+pickup tiny.nib; pos1(cap_stem',0); pos2(cap_stem',0);
+lft x1l=lft x2l=hround max(2u,3u-.5cap_stem'); top y1=h; bot y2=0;
+filldraw stroke z1e--z2e; % stem
+penpos3(cap_band,90); penpos4(cap_band,90);
+penpos5(cap_curve if hefty:-3stem_corr fi,0);
+penpos6(vair,-90); penpos7(vair,-90);
+z3r=top z1; y4=y3; y5=.5[y4l,y6l]; y6=y7;
+x7=x2; y7l=vround(.5h+.5vair); x4=x6;
+if serifs: x4=.5w-.5u; x5r=hround(w-2.25u);
+else: x4=.5w+.5u; x5r=hround(w-u); fi
+x4l:=x6l:=x4-.125cap_curve;
+fill stroke z3e..pulled_arc.e(4,5) & pulled_arc.e(5,6)..z7e; % lobe
+if serifs: pos6'(vair,-90); pos0(cap_stem,180);
+ pos8(cap_curve,180); pos9(vair,-90); pos10(hair,0);
+ z6'=z6; lft x0r=lft x8r=hround(x5-2/3u-.5cap_curve);
+ y8=1/3[y2,y7]; y0=3/5[y2,y7]; x9=.5[x8l,x10r];
+ bot y9r=-o; rt x10r=hround(w-.05u); y10=1/4[y2,y7];
+ filldraw stroke z6'e{right}..z0e---z8e....z9e{right}..z10e{up}; % tail
+ dish_serif(2,1,c,1/3,cap_jut,d,1/3,cap_jut); % lower serif
+else: penpos8(cap_stem-2stem_corr,0); penpos9(cap_stem,0);
+ x8=x6+.5u; y8=y6; x9r=hround(w-.5u); y9=0;
+ fill z8l--diag_end(8l,9l,.5,1,9r,8r)--z8r--cycle; fi % tail
+left_stem=if monospace:fudged.hair else: cap_hair fi if hefty: -3stem_corr fi;
+outer_jut=.8cap_jut; x11l=l+letter_fit+outer_jut+.5u; y11=0;
+x12=x1l-apex_corr-if monospace:2 fi\\u; y12=h;
+alpha=diag_ratio(1,.5left_stem,y12-y11,x12-x11l);
+penpos11(alpha*left_stem,0); penpos12(alpha*left_stem,0);
+fill diag_end(12l,11l,1,1,11r,12r)
+ --diag_end(11r,12r,1,1,12l,11l)--cycle; % diagonal
+y15=h-slab; z15=whatever[z11,z12];
+fill z15--(x1,y15)--(x1,h)--z12--cycle; % link
+penpos13(whatever,angle(z2-z1)); z13=whatever[z11,z12];
+penpos14(cap_band,90); x14=x7; y13l=y14l; y13r=y14r;
+if hefty: y14r=.4h; else: y14=y7; fi
+penstroke z13e--z14e; % bar line
+if serifs: numeric inner_jut; pickup tiny.nib;
+ prime_points_inside(11,12);
+ if rt x11'r+cap_jut+.5u+1<=lft x2l-.75cap_jut:
+ inner_jut=cap_jut;
+ else:
+ rt x11'r+inner_jut+.5u+1=lft x2l-.75inner_jut;
+ fi
+ dish_serif(11',12,i,1/2,outer_jut,j,.6,inner_jut)(dark); % lower left serif
+ nodish_serif(1,2,a,1/3,cap_jut+x1l-x12,b,1/3,.5cap_jut); % upper serif
+fi
+math_fit(0,.75ic#);
+penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); endchar;
+
+font_slant slant; font_x_height x_height#;
+if monospace: font_normal_space 9u#; % no stretching or shrinking
+ font_quad 18u#;
+ font_extra_space 9u#;
+else: font_normal_space 6u#+2letter_fit#;
+ font_normal_stretch 3u#; font_normal_shrink 2u#;
+ font_quad 18u#+4letter_fit#;
+ font_extra_space 2u#;
+fi
+
+bye.
+
+
diff --git a/macros/latex/contrib/aspectratio/arb8.pfb b/macros/latex/contrib/aspectratio/arb8.pfb
new file mode 100644
index 0000000000..f2a0219bc1
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/arb8.pfb
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/arb8.tfm b/macros/latex/contrib/aspectratio/arb8.tfm
new file mode 100644
index 0000000000..4ac0e4ce9c
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/arb8.tfm
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/arb9.mf b/macros/latex/contrib/aspectratio/arb9.mf
new file mode 100644
index 0000000000..1fe6765ea6
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/arb9.mf
@@ -0,0 +1,144 @@
+% Computer Modern Bold Extended Italic 9 point
+if unknown cmbase: input cmbase fi
+
+font_identifier:="ARB"; font_size 9pt#;
+
+u#:=21.3/36pt#; % unit width
+width_adj#:=10.2/36pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=6.2/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=10/36pt#; % extra space added to all sidebars
+
+body_height#:=243/36pt#; % height of tallest characters
+asc_height#:=225/36pt#; % height of lowercase ascenders
+cap_height#:=222.3/36pt#; % height of caps
+fig_height#:=208.8/36pt#; % height of numerals
+x_height#:=144/36pt#; % height of lowercase without ascenders
+math_axis#:=81/36pt#; % axis of symmetry for math symbols
+bar_height#:=76/36pt#; % height of crossbar in lowercase e
+comma_depth#:=63/36pt#; % depth of comma below baseline
+desc_depth#:=63/36pt#; % depth of lowercase descenders
+
+crisp#:=0pt#; % diameter of serif corners
+tiny#:=13/36pt#; % diameter of rounded corners
+fine#:=10/36pt#; % diameter of sharply rounded corners
+thin_join#:=10/36pt#; % width of extrafine details
+hair#:=19/36pt#; % lowercase hairline breadth
+stem#:=35/36pt#; % lowercase stem breadth
+curve#:=40/36pt#; % lowercase curve breadth
+ess#:=32/36pt#; % breadth in middle of lowercase s
+flare#:=39/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=48/36pt#; % diameter of dots
+cap_hair#:=16/36pt#; % uppercase hairline breadth
+cap_stem#:=44/36pt#; % uppercase stem breadth
+cap_curve#:=48/36pt#; % uppercase curve breadth
+cap_ess#:=45/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.57pt#; % thickness of lines in math symbols
+
+dish#:=1/36pt#; % amount erased at top or bottom of serifs
+bracket#:=9/36pt#; % vertical distance from serif base to tangent
+jut#:=22/36pt#; % protrusion of lowercase serifs
+cap_jut#:=35/36pt#; % protrusion of uppercase serifs
+beak_jut#:=10.2/36pt#; % horizontal protrusion of beak serifs
+beak#:=63/36pt#; % vertical protrusion of beak serifs
+vair#:=12.5/36pt#; % vertical diameter of hairlines
+notch_cut#:=9pt#; % maximum breadth above or below notches
+bar#:=16/36pt#; % lowercase bar thickness
+slab#:=16/36pt#; % serif and arm thickness
+cap_bar#:=16/36pt#; % uppercase bar thickness
+cap_band#:=16/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=9pt#; % max breadth above/below uppercase notches
+serif_drop#:=2.7/36pt#; % vertical drop of sloped serifs
+stem_corr#:=1.9/36pt#; % for small refinements of stem breadth
+vair_corr#:=1.4/36pt#; % for small refinements of hairline height
+apex_corr#:=0pt#; % extra width at diagonal junctions
+
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=3/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:=.7; % extra openness of math symbols
+superness:=8/11; % parameter for superellipses
+superpull:=1/8; % extra openness inside bowls
+beak_darkness:=.4; % 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?
+
+mode_setup; font_setup;
+
+
+cmchar "The ligature AR";
+beginchar("A",if serifs: 12u#+.5max(2u#,cap_curve#)
+ else:12.5u#-.5width_adj# fi,cap_height#,0);
+italcorr .75cap_height#*slant- if serifs: 1.75 else: .5 fi\\ u#;
+adjust_fit(6u#+cap_serif_fit#,0);
+pickup tiny.nib; pos1(cap_stem',0); pos2(cap_stem',0);
+lft x1l=lft x2l=hround max(2u,3u-.5cap_stem'); top y1=h; bot y2=0;
+filldraw stroke z1e--z2e; % stem
+penpos3(cap_band,90); penpos4(cap_band,90);
+penpos5(cap_curve if hefty:-3stem_corr fi,0);
+penpos6(vair,-90); penpos7(vair,-90);
+z3r=top z1; y4=y3; y5=.5[y4l,y6l]; y6=y7;
+x7=x2; y7l=vround(.5h+.5vair); x4=x6;
+if serifs: x4=.5w-.5u; x5r=hround(w-2.25u);
+else: x4=.5w+.5u; x5r=hround(w-u); fi
+x4l:=x6l:=x4-.125cap_curve;
+fill stroke z3e..pulled_arc.e(4,5) & pulled_arc.e(5,6)..z7e; % lobe
+if serifs: pos6'(vair,-90); pos0(cap_stem,180);
+ pos8(cap_curve,180); pos9(vair,-90); pos10(hair,0);
+ z6'=z6; lft x0r=lft x8r=hround(x5-2/3u-.5cap_curve);
+ y8=1/3[y2,y7]; y0=3/5[y2,y7]; x9=.5[x8l,x10r];
+ bot y9r=-o; rt x10r=hround(w-.05u); y10=1/4[y2,y7];
+ filldraw stroke z6'e{right}..z0e---z8e....z9e{right}..z10e{up}; % tail
+ dish_serif(2,1,c,1/3,cap_jut,d,1/3,cap_jut); % lower serif
+else: penpos8(cap_stem-2stem_corr,0); penpos9(cap_stem,0);
+ x8=x6+.5u; y8=y6; x9r=hround(w-.5u); y9=0;
+ fill z8l--diag_end(8l,9l,.5,1,9r,8r)--z8r--cycle; fi % tail
+left_stem=if monospace:fudged.hair else: cap_hair fi if hefty: -3stem_corr fi;
+outer_jut=.8cap_jut; x11l=l+letter_fit+outer_jut+.5u; y11=0;
+x12=x1l-apex_corr-if monospace:2 fi\\u; y12=h;
+alpha=diag_ratio(1,.5left_stem,y12-y11,x12-x11l);
+penpos11(alpha*left_stem,0); penpos12(alpha*left_stem,0);
+fill diag_end(12l,11l,1,1,11r,12r)
+ --diag_end(11r,12r,1,1,12l,11l)--cycle; % diagonal
+y15=h-slab; z15=whatever[z11,z12];
+fill z15--(x1,y15)--(x1,h)--z12--cycle; % link
+penpos13(whatever,angle(z2-z1)); z13=whatever[z11,z12];
+penpos14(cap_band,90); x14=x7; y13l=y14l; y13r=y14r;
+if hefty: y14r=.4h; else: y14=y7; fi
+penstroke z13e--z14e; % bar line
+if serifs: numeric inner_jut; pickup tiny.nib;
+ prime_points_inside(11,12);
+ if rt x11'r+cap_jut+.5u+1<=lft x2l-.75cap_jut:
+ inner_jut=cap_jut;
+ else:
+ rt x11'r+inner_jut+.5u+1=lft x2l-.75inner_jut;
+ fi
+ dish_serif(11',12,i,1/2,outer_jut,j,.6,inner_jut)(dark); % lower left serif
+ nodish_serif(1,2,a,1/3,cap_jut+x1l-x12,b,1/3,.5cap_jut); % upper serif
+fi
+math_fit(0,.75ic#);
+penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); endchar;
+
+font_slant slant; font_x_height x_height#;
+if monospace: font_normal_space 9u#; % no stretching or shrinking
+ font_quad 18u#;
+ font_extra_space 9u#;
+else: font_normal_space 6u#+2letter_fit#;
+ font_normal_stretch 3u#; font_normal_shrink 2u#;
+ font_quad 18u#+4letter_fit#;
+ font_extra_space 2u#;
+fi
+
+bye.
+
+
+
diff --git a/macros/latex/contrib/aspectratio/arb9.pfb b/macros/latex/contrib/aspectratio/arb9.pfb
new file mode 100644
index 0000000000..a5714de0ab
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/arb9.pfb
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/arb9.tfm b/macros/latex/contrib/aspectratio/arb9.tfm
new file mode 100644
index 0000000000..9bbd5558e5
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/arb9.tfm
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/arssbi10.mf b/macros/latex/contrib/aspectratio/arssbi10.mf
new file mode 100644
index 0000000000..3e594b01f8
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/arssbi10.mf
@@ -0,0 +1,142 @@
+% Computer Modern Sanserif Bold Slanted 10 point
+if unknown cmbase: input cmbase fi
+
+font_identifier:="ARSSBI"; font_size 10pt#;
+
+u#:=22/36pt#; % unit width
+width_adj#:=22/36pt#; % width adjustment for certain characters
+serif_fit#:=-9/36pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=-11/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#:=250/36pt#; % height of caps
+fig_height#:=250/36pt#; % height of numerals
+x_height#:=165/36pt#; % height of lowercase without ascenders
+math_axis#:=90/36pt#; % axis of symmetry for math symbols
+bar_height#:=90/36pt#; % height of crossbar in lowercase e
+comma_depth#:=38/36pt#; % depth of comma below baseline
+desc_depth#:=70/36pt#; % depth of lowercase descenders
+
+crisp#:=26/36pt#; % diameter of serif corners
+tiny#:=26/36pt#; % diameter of rounded corners
+fine#:=9/36pt#; % diameter of sharply rounded corners
+thin_join#:=9/36pt#; % width of extrafine details
+hair#:=49/36pt#; % lowercase hairline breadth
+stem#:=49/36pt#; % lowercase stem breadth
+curve#:=49/36pt#; % lowercase curve breadth
+ess#:=43/36pt#; % breadth in middle of lowercase s
+flare#:=40/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=47/36pt#; % diameter of dots
+cap_hair#:=49/36pt#; % uppercase hairline breadth
+cap_stem#:=53/36pt#; % uppercase stem breadth
+cap_curve#:=53/36pt#; % uppercase curve breadth
+cap_ess#:=51/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=30/36pt#; % thickness of lines in math symbols
+
+dish#:=0pt#; % amount erased at top or bottom of serifs
+bracket#:=0pt#; % vertical distance from serif base to tangent
+jut#:=0pt#; % protrusion of lowercase serifs
+cap_jut#:=0pt#; % protrusion of uppercase serifs
+beak_jut#:=0pt#; % horizontal protrusion of beak serifs
+beak#:=1.5/36pt#; % vertical protrusion of beak serifs
+vair#:=26/36pt#; % vertical diameter of hairlines
+notch_cut#:=49/36pt#; % maximum breadth above or below notches
+bar#:=26/36pt#; % lowercase bar thickness
+slab#:=36/36pt#; % serif and arm thickness
+cap_bar#:=34/36pt#; % uppercase bar thickness
+cap_band#:=31/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=45/36pt#; % max breadth above/below uppercase notches
+serif_drop#:=2/36pt#; % vertical drop of sloped serifs
+stem_corr#:=1/36pt#; % for small refinements of stem breadth
+vair_corr#:=2/36pt#; % for small refinements of hairline height
+apex_corr#:=18/36pt#; % extra width at diagonal junctions
+
+o#:=8/36pt#; % amount of overshoot for curves
+apex_o#:=0pt#; % amount of overshoot for diagonal junctions
+
+slant:=sind 12/cosd 12; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=.88; % factor applied to weights of heavy characters
+math_spread:=.5; % extra openness of math symbols
+superness:=3/4; % parameter for superellipses
+superpull:=1/18; % extra openness inside bowls
+beak_darkness:=0; % fraction of triangle inside beak serifs
+ligs:=2; % level of ligatures to be included
+
+square_dots:=true; % should dots be square?
+hefty:=true; % should we try hard not to be overweight?
+serifs:=false; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % 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?
+
+mode_setup; font_setup;
+
+
+cmchar "The ligature AR";
+beginchar("A",if serifs: 12u#+.5max(2u#,cap_curve#)
+ else:12.5u#-.5width_adj# fi,cap_height#,0);
+italcorr .75cap_height#*slant- if serifs: 1.75 else: .5 fi\\ u#;
+adjust_fit(6u#+cap_serif_fit#,0);
+pickup tiny.nib; pos1(cap_stem',0); pos2(cap_stem',0);
+lft x1l=lft x2l=hround max(2u,3u-.5cap_stem'); top y1=h; bot y2=0;
+filldraw stroke z1e--z2e; % stem
+penpos3(cap_band,90); penpos4(cap_band,90);
+penpos5(cap_curve if hefty:-3stem_corr fi,0);
+penpos6(vair,-90); penpos7(vair,-90);
+z3r=top z1; y4=y3; y5=.5[y4l,y6l]; y6=y7;
+x7=x2; y7l=vround(.5h+.5vair); x4=x6;
+if serifs: x4=.5w-.5u; x5r=hround(w-2.25u);
+else: x4=.5w+.5u; x5r=hround(w-u); fi
+x4l:=x6l:=x4-.125cap_curve;
+fill stroke z3e..pulled_arc.e(4,5) & pulled_arc.e(5,6)..z7e; % lobe
+if serifs: pos6'(vair,-90); pos0(cap_stem,180);
+ pos8(cap_curve,180); pos9(vair,-90); pos10(hair,0);
+ z6'=z6; lft x0r=lft x8r=hround(x5-2/3u-.5cap_curve);
+ y8=1/3[y2,y7]; y0=3/5[y2,y7]; x9=.5[x8l,x10r];
+ bot y9r=-o; rt x10r=hround(w-.05u); y10=1/4[y2,y7];
+ filldraw stroke z6'e{right}..z0e---z8e....z9e{right}..z10e{up}; % tail
+ dish_serif(2,1,c,1/3,cap_jut,d,1/3,cap_jut); % lower serif
+else: penpos8(cap_stem-2stem_corr,0); penpos9(cap_stem,0);
+ x8=x6+.5u; y8=y6; x9r=hround(w-.5u); y9=0;
+ fill z8l--diag_end(8l,9l,.5,1,9r,8r)--z8r--cycle; fi % tail
+left_stem=if monospace:fudged.hair else: cap_hair fi if hefty: -3stem_corr fi;
+outer_jut=.8cap_jut; x11l=l+letter_fit+outer_jut+.5u; y11=0;
+x12=x1l-apex_corr-if monospace:2 fi\\u; y12=h;
+alpha=diag_ratio(1,.5left_stem,y12-y11,x12-x11l);
+penpos11(alpha*left_stem,0); penpos12(alpha*left_stem,0);
+fill diag_end(12l,11l,1,1,11r,12r)
+ --diag_end(11r,12r,1,1,12l,11l)--cycle; % diagonal
+y15=h-slab; z15=whatever[z11,z12];
+fill z15--(x1,y15)--(x1,h)--z12--cycle; % link
+penpos13(whatever,angle(z2-z1)); z13=whatever[z11,z12];
+penpos14(cap_band,90); x14=x7; y13l=y14l; y13r=y14r;
+if hefty: y14r=.4h; else: y14=y7; fi
+penstroke z13e--z14e; % bar line
+if serifs: numeric inner_jut; pickup tiny.nib;
+ prime_points_inside(11,12);
+ if rt x11'r+cap_jut+.5u+1<=lft x2l-.75cap_jut:
+ inner_jut=cap_jut;
+ else:
+ rt x11'r+inner_jut+.5u+1=lft x2l-.75inner_jut;
+ fi
+ dish_serif(11',12,i,1/2,outer_jut,j,.6,inner_jut)(dark); % lower left serif
+ nodish_serif(1,2,a,1/3,cap_jut+x1l-x12,b,1/3,.5cap_jut); % upper serif
+fi
+math_fit(0,.75ic#);
+penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); endchar;
+
+font_slant slant; font_x_height x_height#;
+if monospace: font_normal_space 9u#; % no stretching or shrinking
+ font_quad 18u#;
+ font_extra_space 9u#;
+else: font_normal_space 6u#+2letter_fit#;
+ font_normal_stretch 3u#; font_normal_shrink 2u#;
+ font_quad 18u#+4letter_fit#;
+ font_extra_space 2u#;
+fi
+
+bye.
+
diff --git a/macros/latex/contrib/aspectratio/arssbi10.pfb b/macros/latex/contrib/aspectratio/arssbi10.pfb
new file mode 100644
index 0000000000..d2128b887e
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/arssbi10.pfb
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/arssbi10.tfm b/macros/latex/contrib/aspectratio/arssbi10.tfm
new file mode 100644
index 0000000000..2b656159d9
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/arssbi10.tfm
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/arssi10.mf b/macros/latex/contrib/aspectratio/arssi10.mf
new file mode 100644
index 0000000000..7a47e76587
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/arssi10.mf
@@ -0,0 +1,142 @@
+% Computer Modern Sanserif 10 point
+if unknown cmbase: input cmbase fi
+
+font_identifier:="ARSSI"; font_size 10pt#;
+
+u#:=20/36pt#; % unit width
+width_adj#:=15/36pt#; % width adjustment for certain characters
+serif_fit#:=-7/36pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=-10/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#:=250/36pt#; % height of caps
+fig_height#:=236/36pt#; % height of numerals
+x_height#:=160/36pt#; % height of lowercase without ascenders
+math_axis#:=90/36pt#; % axis of symmetry for math symbols
+bar_height#:=79/36pt#; % height of crossbar in lowercase e
+comma_depth#:=45/36pt#; % depth of comma below baseline
+desc_depth#:=70/36pt#; % depth of lowercase descenders
+
+crisp#:=0pt#; % diameter of serif corners
+tiny#:=0pt#; % diameter of rounded corners
+fine#:=0pt#; % diameter of sharply rounded corners
+thin_join#:=17/36pt#; % width of extrafine details
+hair#:=28/36pt#; % lowercase hairline breadth
+stem#:=28/36pt#; % lowercase stem breadth
+curve#:=28/36pt#; % lowercase curve breadth
+ess#:=28/36pt#; % breadth in middle of lowercase s
+flare#:=25/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=30/36pt#; % diameter of dots
+cap_hair#:=28/36pt#; % uppercase hairline breadth
+cap_stem#:=32/36pt#; % uppercase stem breadth
+cap_curve#:=32/36pt#; % uppercase curve breadth
+cap_ess#:=32/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.4pt#; % thickness of lines in math symbols
+
+dish#:=0pt#; % amount erased at top or bottom of serifs
+bracket#:=0pt#; % vertical distance from serif base to tangent
+jut#:=0pt#; % protrusion of lowercase serifs
+cap_jut#:=0pt#; % protrusion of uppercase serifs
+beak_jut#:=0pt#; % horizontal protrusion of beak serifs
+beak#:=.5/36pt#; % vertical protrusion of beak serifs
+vair#:=22/36pt#; % vertical diameter of hairlines
+notch_cut#:=18/36pt#; % maximum breadth above or below notches
+bar#:=21/36pt#; % lowercase bar thickness
+slab#:=23/36pt#; % serif and arm thickness
+cap_bar#:=22/36pt#; % uppercase bar thickness
+cap_band#:=20/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=25/36pt#; % max breadth above/below uppercase notches
+serif_drop#:=2/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#:=5/36pt#; % extra width at diagonal junctions
+
+o#:=8/36pt#; % amount of overshoot for curves
+apex_o#:=0pt#; % amount of overshoot for diagonal junctions
+
+slant:=sind 12/cosd 12; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=.96; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt 2; % parameter for superellipses
+superpull:=1/20; % extra openness inside bowls
+beak_darkness:=0; % fraction of triangle inside beak serifs
+ligs:=2; % level of ligatures to be included
+
+square_dots:=true; % should dots be square?
+hefty:=true; % should we try hard not to be overweight?
+serifs:=false; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % 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?
+
+mode_setup; font_setup;
+
+
+cmchar "The ligature AR";
+beginchar("A",if serifs: 12u#+.5max(2u#,cap_curve#)
+ else:12.5u#-.5width_adj# fi,cap_height#,0);
+italcorr .75cap_height#*slant- if serifs: 1.75 else: .5 fi\\ u#;
+adjust_fit(6u#+cap_serif_fit#,0);
+pickup tiny.nib; pos1(cap_stem',0); pos2(cap_stem',0);
+lft x1l=lft x2l=hround max(2u,3u-.5cap_stem'); top y1=h; bot y2=0;
+filldraw stroke z1e--z2e; % stem
+penpos3(cap_band,90); penpos4(cap_band,90);
+penpos5(cap_curve if hefty:-3stem_corr fi,0);
+penpos6(vair,-90); penpos7(vair,-90);
+z3r=top z1; y4=y3; y5=.5[y4l,y6l]; y6=y7;
+x7=x2; y7l=vround(.5h+.5vair); x4=x6;
+if serifs: x4=.5w-.5u; x5r=hround(w-2.25u);
+else: x4=.5w+.5u; x5r=hround(w-u); fi
+x4l:=x6l:=x4-.125cap_curve;
+fill stroke z3e..pulled_arc.e(4,5) & pulled_arc.e(5,6)..z7e; % lobe
+if serifs: pos6'(vair,-90); pos0(cap_stem,180);
+ pos8(cap_curve,180); pos9(vair,-90); pos10(hair,0);
+ z6'=z6; lft x0r=lft x8r=hround(x5-2/3u-.5cap_curve);
+ y8=1/3[y2,y7]; y0=3/5[y2,y7]; x9=.5[x8l,x10r];
+ bot y9r=-o; rt x10r=hround(w-.05u); y10=1/4[y2,y7];
+ filldraw stroke z6'e{right}..z0e---z8e....z9e{right}..z10e{up}; % tail
+ dish_serif(2,1,c,1/3,cap_jut,d,1/3,cap_jut); % lower serif
+else: penpos8(cap_stem-2stem_corr,0); penpos9(cap_stem,0);
+ x8=x6+.5u; y8=y6; x9r=hround(w-.5u); y9=0;
+ fill z8l--diag_end(8l,9l,.5,1,9r,8r)--z8r--cycle; fi % tail
+left_stem=if monospace:fudged.hair else: cap_hair fi if hefty: -3stem_corr fi;
+outer_jut=.8cap_jut; x11l=l+letter_fit+outer_jut+.5u; y11=0;
+x12=x1l-apex_corr-if monospace:2 fi\\u; y12=h;
+alpha=diag_ratio(1,.5left_stem,y12-y11,x12-x11l);
+penpos11(alpha*left_stem,0); penpos12(alpha*left_stem,0);
+fill diag_end(12l,11l,1,1,11r,12r)
+ --diag_end(11r,12r,1,1,12l,11l)--cycle; % diagonal
+y15=h-slab; z15=whatever[z11,z12];
+fill z15--(x1,y15)--(x1,h)--z12--cycle; % link
+penpos13(whatever,angle(z2-z1)); z13=whatever[z11,z12];
+penpos14(cap_band,90); x14=x7; y13l=y14l; y13r=y14r;
+if hefty: y14r=.4h; else: y14=y7; fi
+penstroke z13e--z14e; % bar line
+if serifs: numeric inner_jut; pickup tiny.nib;
+ prime_points_inside(11,12);
+ if rt x11'r+cap_jut+.5u+1<=lft x2l-.75cap_jut:
+ inner_jut=cap_jut;
+ else:
+ rt x11'r+inner_jut+.5u+1=lft x2l-.75inner_jut;
+ fi
+ dish_serif(11',12,i,1/2,outer_jut,j,.6,inner_jut)(dark); % lower left serif
+ nodish_serif(1,2,a,1/3,cap_jut+x1l-x12,b,1/3,.5cap_jut); % upper serif
+fi
+math_fit(0,.75ic#);
+penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); endchar;
+
+font_slant slant; font_x_height x_height#;
+if monospace: font_normal_space 9u#; % no stretching or shrinking
+ font_quad 18u#;
+ font_extra_space 9u#;
+else: font_normal_space 6u#+2letter_fit#;
+ font_normal_stretch 3u#; font_normal_shrink 2u#;
+ font_quad 18u#+4letter_fit#;
+ font_extra_space 2u#;
+fi
+
+bye.
+
diff --git a/macros/latex/contrib/aspectratio/arssi10.pfb b/macros/latex/contrib/aspectratio/arssi10.pfb
new file mode 100644
index 0000000000..016db192f8
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/arssi10.pfb
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/arssi10.tfm b/macros/latex/contrib/aspectratio/arssi10.tfm
new file mode 100644
index 0000000000..c930e5f505
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/arssi10.tfm
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/artti10.mf b/macros/latex/contrib/aspectratio/artti10.mf
new file mode 100644
index 0000000000..c8eb0394e3
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/artti10.mf
@@ -0,0 +1,142 @@
+% Computer Modern typewriter 10 point
+if unknown cmbase: input cmbase fi
+
+font_identifier:="ARTTI"; font_size 10pt#;
+
+u#:=21/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=0pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=250/36pt#; % height of tallest characters
+asc_height#:=220/36pt#; % height of lowercase ascenders
+cap_height#:=220/36pt#; % height of caps
+fig_height#:=220/36pt#; % height of numerals
+x_height#:=155/36pt#; % height of lowercase without ascenders
+math_axis#:=110/36pt#; % axis of symmetry for math symbols
+bar_height#:=79/36pt#; % height of crossbar in lowercase e
+comma_depth#:=50/36pt#; % depth of comma below baseline
+desc_depth#:=80/36pt#; % depth of lowercase descenders
+
+crisp#:=22/36pt#; % diameter of serif corners
+tiny#:=22/36pt#; % diameter of rounded corners
+fine#:=21/36pt#; % diameter of sharply rounded corners
+thin_join#:=21/36pt#; % width of extrafine details
+hair#:=25/36pt#; % lowercase hairline breadth
+stem#:=25/36pt#; % lowercase stem breadth
+curve#:=25/36pt#; % lowercase curve breadth
+ess#:=22/36pt#; % breadth in middle of lowercase s
+flare#:=32/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=36/36pt#; % diameter of dots
+cap_hair#:=25/36pt#; % uppercase hairline breadth
+cap_stem#:=25/36pt#; % uppercase stem breadth
+cap_curve#:=25/36pt#; % uppercase curve breadth
+cap_ess#:=25/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=25/36pt#; % thickness of lines in math symbols
+
+dish#:=0pt#; % amount erased at top or bottom of serifs
+bracket#:=0pt#; % vertical distance from serif base to tangent
+jut#:=34/36pt#; % protrusion of lowercase serifs
+cap_jut#:=34/36pt#; % protrusion of uppercase serifs
+beak_jut#:=0pt#; % horizontal protrusion of beak serifs
+beak#:=34/36pt#; % vertical protrusion of beak serifs
+vair#:=22/36pt#; % vertical diameter of hairlines
+notch_cut#:=25/36pt#; % maximum breadth above or below notches
+bar#:=22/36pt#; % lowercase bar thickness
+slab#:=22/36pt#; % serif and arm thickness
+cap_bar#:=22/36pt#; % uppercase bar thickness
+cap_band#:=22/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=25/36pt#; % max breadth above/below uppercase notches
+serif_drop#:=0pt#; % vertical drop of sloped serifs
+stem_corr#:=0pt#; % for small refinements of stem breadth
+vair_corr#:=0pt#; % for small refinements of hairline height
+apex_corr#:=10/36pt#; % extra width at diagonal junctions
+
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=3/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0.25; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=0.81; % factor applied to weights of heavy characters
+math_spread:=-1; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=0; % extra openness inside bowls
+beak_darkness:=0; % fraction of triangle inside beak serifs
+ligs:=0; % level of ligatures to be included
+
+square_dots:=false; % should dots be square?
+hefty:=true; % should we try hard not to be overweight?
+serifs:=true; % should serifs and bulbs be attached?
+monospace:=true; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+low_asterisk:=true; % should the asterisk be centered at the axis?
+math_fitting:=true; % should math-mode spacing be used?
+
+mode_setup; font_setup;
+
+
+cmchar "The ligature AR";
+beginchar("A",if serifs: 12u#+.5max(2u#,cap_curve#)
+ else:12.5u#-.5width_adj# fi,cap_height#,0);
+italcorr .75cap_height#*slant- if serifs: 1.75 else: .5 fi\\ u#;
+adjust_fit(6u#+cap_serif_fit#,0);
+pickup tiny.nib; pos1(cap_stem',0); pos2(cap_stem',0);
+lft x1l=lft x2l=hround max(2u,3u-.5cap_stem'); top y1=h; bot y2=0;
+filldraw stroke z1e--z2e; % stem
+penpos3(cap_band,90); penpos4(cap_band,90);
+penpos5(cap_curve if hefty:-3stem_corr fi,0);
+penpos6(vair,-90); penpos7(vair,-90);
+z3r=top z1; y4=y3; y5=.5[y4l,y6l]; y6=y7;
+x7=x2; y7l=vround(.5h+.5vair); x4=x6;
+if serifs: x4=.5w-.5u; x5r=hround(w-2.25u);
+else: x4=.5w+.5u; x5r=hround(w-u); fi
+x4l:=x6l:=x4-.125cap_curve;
+fill stroke z3e..pulled_arc.e(4,5) & pulled_arc.e(5,6)..z7e; % lobe
+if serifs: pos6'(vair,-90); pos0(cap_stem,180);
+ pos8(cap_curve,180); pos9(vair,-90); pos10(hair,0);
+ z6'=z6; lft x0r=lft x8r=hround(x5-2/3u-.5cap_curve);
+ y8=1/3[y2,y7]; y0=3/5[y2,y7]; x9=.5[x8l,x10r];
+ bot y9r=-o; rt x10r=hround(w-.05u); y10=1/4[y2,y7];
+ filldraw stroke z6'e{right}..z0e---z8e....z9e{right}..z10e{up}; % tail
+ dish_serif(2,1,c,1/3,cap_jut,d,1/3,cap_jut); % lower serif
+else: penpos8(cap_stem-2stem_corr,0); penpos9(cap_stem,0);
+ x8=x6+.5u; y8=y6; x9r=hround(w-.5u); y9=0;
+ fill z8l--diag_end(8l,9l,.5,1,9r,8r)--z8r--cycle; fi % tail
+left_stem=if monospace:fudged.hair else: cap_hair fi if hefty: -3stem_corr fi;
+outer_jut=.8cap_jut; x11l=l+letter_fit+outer_jut+.5u; y11=0;
+x12=x1l-apex_corr-if monospace:2 fi\\u; y12=h;
+alpha=diag_ratio(1,.5left_stem,y12-y11,x12-x11l);
+penpos11(alpha*left_stem,0); penpos12(alpha*left_stem,0);
+fill diag_end(12l,11l,1,1,11r,12r)
+ --diag_end(11r,12r,1,1,12l,11l)--cycle; % diagonal
+y15=h-slab; z15=whatever[z11,z12];
+fill z15--(x1,y15)--(x1,h)--z12--cycle; % link
+penpos13(whatever,angle(z2-z1)); z13=whatever[z11,z12];
+penpos14(cap_band,90); x14=x7; y13l=y14l; y13r=y14r;
+if hefty: y14r=.4h; else: y14=y7; fi
+penstroke z13e--z14e; % bar line
+if serifs: numeric inner_jut; pickup tiny.nib;
+ prime_points_inside(11,12);
+ if rt x11'r+cap_jut+.5u+1<=lft x2l-.75cap_jut:
+ inner_jut=cap_jut;
+ else:
+ rt x11'r+inner_jut+.5u+1=lft x2l-.75inner_jut;
+ fi
+ dish_serif(11',12,i,1/2,outer_jut,j,.6,inner_jut)(dark); % lower left serif
+ nodish_serif(1,2,a,1/3,cap_jut+x1l-x12,b,1/3,.5cap_jut); % upper serif
+fi
+math_fit(0,.75ic#);
+penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); endchar;
+
+font_slant slant; font_x_height x_height#;
+if monospace: font_normal_space 9u#; % no stretching or shrinking
+ font_quad 18u#;
+ font_extra_space 9u#;
+else: font_normal_space 6u#+2letter_fit#;
+ font_normal_stretch 3u#; font_normal_shrink 2u#;
+ font_quad 18u#+4letter_fit#;
+ font_extra_space 2u#;
+fi
+
+bye.
+
diff --git a/macros/latex/contrib/aspectratio/artti10.pfb b/macros/latex/contrib/aspectratio/artti10.pfb
new file mode 100644
index 0000000000..70f3789378
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/artti10.pfb
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/artti10.tfm b/macros/latex/contrib/aspectratio/artti10.tfm
new file mode 100644
index 0000000000..2c49d3cb51
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/artti10.tfm
Binary files differ
diff --git a/macros/latex/contrib/aspectratio/aspectratio.map b/macros/latex/contrib/aspectratio/aspectratio.map
new file mode 100644
index 0000000000..7cc0b6c2d5
--- /dev/null
+++ b/macros/latex/contrib/aspectratio/aspectratio.map
@@ -0,0 +1,22 @@
+## Fonts containing the aspect ratio AR ligature; glyph "A"
+ar5 <ar5.pfb
+ar6 <ar6.pfb
+ar7 <ar7.pfb
+ar8 <ar8.pfb
+ar9 <ar9.pfb
+ar10 <ar10.pfb
+ar12 <ar12.pfb
+arb5 <arb5.pfb
+arb6 <arb6.pfb
+arb7 <arb7.pfb
+arb8 <arb8.pfb
+arb9 <arb9.pfb
+arb10 <arb10.pfb
+arb12 <arb12.pfb
+artti10 <artti10.pfb
+arssi10 <arssi10.pfb
+arssbi10 <arssbi10.pfb
+aparri <aparri.pfb
+aparbi <aparbi.pfb
+amarri <amarri.pfb
+amarbi <amarbi.pfb