\documentclass[11pt,a4paper]{article}
\usepackage[margin=26mm]{geometry}
\usepackage{amsmath}
\usepackage{fontspec}
\setmainfont{Nimbus Roman}
\setsansfont{Nimbus Sans}
\setmonofont{Nimbus Mono PS}
\usepackage{unicode-math}
\setmathfont{MTPro2Math.otf}[Path=../out/]
\usepackage{booktabs,tabularx,longtable,enumitem}
\usepackage[hidelinks,pdftitle={mtp2otf: Build guide and technical reference},pdfauthor={}]{hyperref}
\setlength{\parindent}{0pt}
\setlength{\parskip}{4pt}
\emergencystretch=2em
\setlist{nosep,leftmargin=*}
\clubpenalty=10000
\widowpenalty=10000
\newcommand{\file}[1]{{\small\texttt{\detokenize{#1}}}}
\AddToHook{env/verbatim/begin}{\small}
\title{mtp2otf\\\large Build guide and technical reference}
\author{}
\date{}
\begin{document}
\maketitle
\vspace{-2em}

\section{Overview}
mtp2otf converts MathTime\texttrademark{} Professional 2 (MTPro2) Type~1
fonts and TeX metrics to OpenType MATH. It preserves the source designs,
including optical script sizes, and supplies the layout
data used by Unicode math engines. Upright Latin letters and additional
text characters come from a separate Roman font pair.

The converter produces OTF for LuaLaTeX and TTF for Microsoft Word.
Full and Lite use separate family names and can be installed together.
The selected edition requires the corresponding MTPro2 source files.

No additional mtp2otf package is needed to use the generated fonts.
Unicode characters and OpenType features provide access to the designs.
The original \file{mtpro2} package's custom commands are not included.
See \file{font-guide.pdf} for illustrated font usage and character variants.

\section{Building the fonts}\label{sec:build}
\subsection{Requirements}
The build requires a POSIX shell, Python~3.10 or later with fontTools,
FontForge with Python~3.10 or later support, and \file{tftopl} from
TeX Live. These commands must be on PATH.

Create \file{mtpro2/} and \file{donors/} beside \file{build.sh}.
Supply the font files separately:
\begin{itemize}
\item \file{mtpro2/}: MTPro2 PFB/TFM files and \file{mtpro2.sty}.
Full also requires \file{umt2ms.fd}, \file{umt2mf.fd},
\file{umt2bb.fd}, and \file{umt2hrb.fd}.
\item \file{donors/}: \file{NimbusRoman-Regular.otf} and
\file{NimbusRoman-Bold.otf} from Artifex urw-base35.
\end{itemize}
Place the files directly in these directories. The build reports missing
inputs for the selected edition.

Another Roman pair can be selected with the options below. The faces must
be static CFF OTF or TrueType TTF, upright and proportional, from the same
family, and have the required Latin and digit coverage and Regular/Bold
weights.

\subsection{Build options}
The default build uses Full and minimal donor coverage:
\begin{samepage}
\begin{verbatim}
./build.sh
\end{verbatim}
\end{samepage}
Select Lite, extended donor coverage, or a different Roman pair as needed:
\begin{samepage}
\begin{verbatim}
./build.sh --edition=lite
./build.sh --donor-coverage=extended
./build.sh --roman-regular=/path/to/Regular.otf \
           --roman-bold=/path/to/Bold.otf
./build.sh --help
\end{verbatim}
\end{samepage}
The edition and donor options can be combined. Relative donor paths are
resolved from the current directory; project paths are relative to
\file{build.sh}.

Minimal coverage uses a fixed selection of Roman characters. Extended
coverage adds eligible characters available in the Regular donor, without
replacing MTPro2's mathematical glyphs. It does not add Full-only features
to Lite. Appendix~\ref{sec:donors} lists the selection rules.

\subsection{Output}
The generated fonts are placed in \file{out/}:
\begin{center}
\begin{tabular}{@{}lll@{}}
\toprule
Edition & OTF & TTF \\
\midrule
Full & \file{MTPro2Math.otf} & \file{MTPro2Math.ttf} \\
Lite & \file{MTPro2MathLite.otf} & \file{MTPro2MathLite.ttf} \\
\bottomrule
\end{tabular}
\end{center}
Install the generated fonts manually. Errors are reported on stderr;
generation diagnostics are recorded in \file{build/<edition>/build.log}.
Check the command's exit status: a failed build may leave previous output
files in place. Do not run concurrent builds of the same edition.

\section{Using the fonts}\label{sec:use}
\subsection{Microsoft Word}
Install the TTF and select \file{MTPro2 Math} or
\file{MTPro2 Math Lite} as the equation font. For the equation text,
enable \emph{Kerning for fonts} at 1~pt and above in the Font dialog.
In Microsoft 365 Word for Windows, as tested on 22 October 2026,
italic correction is not applied to ordinary character spacing, so spacing
may differ slightly from the original Type~1 output.

Use Word's equation editor for mathematical alphabets, accents, delimiters
and operators. It does not expose the same OpenType feature controls as
LuaLaTeX. The explicit feature examples in \file{font-guide.pdf} are for LuaLaTeX.

\subsection{LuaLaTeX}
Load the OTF with \file{unicode-math}:
\begin{samepage}
\begin{verbatim}
\usepackage{unicode-math}
\setmathfont{MTPro2Math.otf}
\end{verbatim}
\end{samepage}
For Lite, use \file{MTPro2MathLite.otf}. If the font is not installed,
specify its directory with the \file{Path} option.

Use \file{unicode-math} commands for alphabets and symbols, and the usual
math structures for scripts, fractions, accents and delimiters.
See \file{font-guide.pdf} for input examples and visual comparisons;
Appendix~\ref{sec:alphabets} lists the exact feature inputs.

Luaotfload 3.29 can omit pair kerning between script-size variants.

The font can also be used with \file{lua-unicode-math}.

\section{License and project}
Project-authored code and documentation use 0BSD (\file{LICENSE}).
MTPro2, donor fonts and external tools retain their respective terms.
MathTime is a trademark of Publish or Perish, Inc. This independent project
is not affiliated with or endorsed by Publish or Perish, Inc., Personal
TeX, Inc., or Artifex Software.

Repository: \url{https://github.com/satom-zk/mtp2otf}\\
Issues: \url{https://github.com/satom-zk/mtp2otf/issues}

\section{Release history}
\begin{description}
\item[v1.0] Initial release.
\item[v1.1] Added large glyphs, missing mathematical alphabets, and
  character-variant access.
\item[v1.2] Corrected TFM kern interpretation and removed supplemental
  Word-oriented spacing adjustments, improving LuaLaTeX output.
\item[v1.3] Revised MATH constants and prime conversion against the original
  sources, and reorganized the build tools.
\item[v1.4] Revised Unicode mappings and standard input routes, reorganized
  character variants, and separated ordinary delimiter growth from optional
  large ready-made forms. Removed unused private-use entries.
\end{description}

\newpage
\appendix

\section{Character variants}\label{sec:alphabets}
The inputs below are the standard Unicode characters selected by the
mathematical alphabet or symbol command. Features also follow the
corresponding script-size designs. F = Full; L = Lite.

\begingroup\small\setlength\tabcolsep{3pt}\renewcommand\arraystretch{1.12}
\begin{longtable}{@{}p{0.12\linewidth}p{0.34\linewidth}p{0.39\linewidth}p{0.09\linewidth}@{}}
\toprule
Feature & Design & Standard inputs & Edition \\ \midrule \endfirsthead
\toprule
Feature & Design & Standard inputs & Edition \\ \midrule \endhead
\bottomrule\endfoot
\texttt{cv01} & Swash z & \texttt{U+1D467} & F/L \\*
 & & \texttt{U+1D49B} & F \\
\texttt{cv02} & Alternative beta and delta, upright and italic & \texttt{U+03B2}; \texttt{U+03B4}; \texttt{U+1D6FD}; \texttt{U+1D6FF} & F/L \\*
 & & \texttt{U+1D6C3}; \texttt{U+1D6C5}; \texttt{U+1D737}; \texttt{U+1D739} & F \\
\texttt{cv03} & Alternative hbar (original hslash) & \texttt{U+210F} & F/L \\
\texttt{cv11} & Slanted product, coproduct and sum & \texttt{U+220F--U+2211} & F/L \\
\texttt{cv12} & Alternative small and large conjunction signs & \texttt{U+2227}; \texttt{U+22C0} & F/L \\
\texttt{cv21} & Straight braces & \texttt{U+007B}; \texttt{U+007D} & F/L \\
\texttt{cv22} & Large prebuilt parentheses & \texttt{U+0028--U+0029} & F/L \\
\texttt{cv23} & Large prebuilt curly braces & \texttt{U+007B}; \texttt{U+007D} & F/L \\
\texttt{cv24=1} & Plain overbrace and underbrace & \texttt{U+23DE--U+23DF} & F/L \\
\texttt{cv24=2} & Curly overbrace and underbrace & \texttt{U+23DE--U+23DF} & F/L \\
\texttt{cv31} & Script alternatives, regular and bold & Script alternate inputs listed below & F \\
\texttt{cv32} & Fraktur alternatives, regular and bold & Fraktur alternate inputs listed below & F \\
\texttt{cv33} & Heavier upright Blackboard & Upright Blackboard Latin and digits & F \\
\texttt{cv34} & Holey Blackboard, including the standard italic forms & Upright Blackboard Latin and digits; \texttt{U+213C--213F}; \texttt{U+2145--2149} & F \\
\texttt{cv41} & Alternative proper-subset and proper-superset signs & \texttt{U+228A--U+228B}; \texttt{U+2ACB--U+2ACC} & F \\
\texttt{cv42} & Alternative less/greater-than-but-not-equal signs & \texttt{U+2268--U+2269} & F \\
\texttt{cv43} & Short divides and parallel signs, including their negations & \texttt{U+2223--U+2226} & F \\
\texttt{cv44} & Thick similar and approximately-equal signs & \texttt{U+223C}; \texttt{U+2248} & F \\
\texttt{cv45} & Alternative proportional-to, smile and frown signs & \texttt{U+221D}; \texttt{U+2322--U+2323} & F \\
\texttt{cv46=1} & Slanted-equality negated comparisons; alternative negated inclusions & \texttt{U+2270--U+2271}; \texttt{U+2288--U+2289} & F \\
\texttt{cv46=2} & Double-equality negated comparisons and inclusions & \texttt{U+2270--U+2271}; \texttt{U+2288--U+2289} & F \\
\texttt{cv47} & Alternative not-similar sign & \texttt{U+2241} & F \\
\texttt{cv51} & Alternative empty set & \texttt{U+2205} & F \\
\texttt{cv52} & Shaded spade and club & \texttt{U+2660}; \texttt{U+2663} & F/L \\
\texttt{cv53} & Alternative yen and registered signs & \texttt{U+00A5}; \texttt{U+00AE} & F \\
\texttt{ss01} & Curly Script & Regular Script alphabet & F \\
\texttt{ss02} & Curly Script alternate series & Regular Script alphabet & F \\
\end{longtable}\endgroup

\file{cv33} and \file{cv34} together select the heavier Holey upright
Blackboard design. \file{cv33} leaves the Greek and standard italic
Blackboard characters unchanged. \file{cv34} selects their corresponding
Holey designs.

\file{ss01} and \file{cv31} can be combined. \file{ss02} selects the Curly
alternate series without requiring \file{ss01}; it overrides the regular
Script choices of \file{ss01} and \file{cv31}. \file{cv32} remains independent.

For \file{cv24} and \file{cv46}, choose one numbered value per tag;
disabling the feature restores the default. \file{cv47} affects only
U+2241 and can be combined with either \file{cv46} choice.

\begingroup\small\raggedright\textbf{Script alternate inputs:} \texttt{U+2110}; \texttt{U+2112}; \texttt{U+1D49E}; \texttt{U+1D4A2}; \texttt{U+1D4AC}; \texttt{U+1D4AE}; \texttt{U+1D4B4--U+1D4B5}; \texttt{U+1D4C7}; \texttt{U+1D4CF}; \texttt{U+1D4D2}; \texttt{U+1D4D6}; \texttt{U+1D4D8}; \texttt{U+1D4DB}; \texttt{U+1D4E0}; \texttt{U+1D4E2}; \texttt{U+1D4E8--U+1D4E9}; \texttt{U+1D4FB}; \texttt{U+1D503}.\par\endgroup

\begingroup\small\raggedright\textbf{Fraktur alternate inputs:} \texttt{U+2111}; \texttt{U+211C}; \texttt{U+1D51C}; \texttt{U+1D535--U+1D536}; \texttt{U+1D584}; \texttt{U+1D59D--U+1D59E}.\par\endgroup

\section{Growing symbols}\label{sec:large}
The table lists standard inputs with MATH size data in both editions.
V and H denote vertical and horizontal growth. Var. counts the records
in the prebuilt variant list; Asm. indicates an assembly. Zero variants
with an assembly means that growth uses repeatable parts.

Use paired \file{\left} and \file{\right} for delimiters, \file{\sqrt}
for radicals, and accent or over/under commands for horizontal constructions.
The table describes font data; a symbol command alone need not request growth.
For U+20D7, \file{\vec} selects a fixed accent and \file{\overrightarrow}
requests a wide accent. \file{\bar} and \file{\overbar} use the fixed
U+0304 accent; \file{\wideoverbar} uses U+0305.

\begingroup\fontsize{8}{10}\selectfont\setlength\tabcolsep{3pt}\renewcommand\arraystretch{1.08}
\begin{longtable}{@{}p{0.12\linewidth}p{0.38\linewidth}p{0.16\linewidth}p{0.06\linewidth}p{0.08\linewidth}p{0.08\linewidth}@{}}
\toprule
Unicode & Input & Selection & V/H & Var. & Asm. \\ \midrule \endfirsthead
\toprule
Unicode & Input & Selection & V/H & Var. & Asm. \\ \midrule \endhead
\bottomrule\endfoot
\texttt{U+0028} & \texttt{\detokenize{\lparen}} & default & V & 5 & yes \\
\texttt{U+0028} & \texttt{\detokenize{\lparen}} & \texttt{cv22=1} & V & 24 & yes \\
\texttt{U+0029} & \texttt{\detokenize{\rparen}} & default & V & 5 & yes \\
\texttt{U+0029} & \texttt{\detokenize{\rparen}} & \texttt{cv22=1} & V & 24 & yes \\
\texttt{U+002F} & \texttt{\detokenize{\mathslash}} & default & V & 5 & no \\
\texttt{U+005B} & \texttt{\detokenize{\lbrack}} & default & V & 5 & yes \\
\texttt{U+005C} & \texttt{\detokenize{\backslash}} & default & V & 5 & no \\
\texttt{U+005D} & \texttt{\detokenize{\rbrack}} & default & V & 5 & yes \\
\texttt{U+007B} & \texttt{\detokenize{\lbrace}} & default & V & 5 & yes \\
\texttt{U+007B} & \texttt{\detokenize{\lbrace}} & \texttt{cv23=1} & V & 24 & yes \\
\texttt{U+007B} & \texttt{\detokenize{\lbrace}} & \texttt{cv21=1} & V & 5 & yes \\
\texttt{U+007C} & \texttt{\detokenize{\vert}} & default & V & 1 & yes \\
\texttt{U+007D} & \texttt{\detokenize{\rbrace}} & default & V & 5 & yes \\
\texttt{U+007D} & \texttt{\detokenize{\rbrace}} & \texttt{cv23=1} & V & 24 & yes \\
\texttt{U+007D} & \texttt{\detokenize{\rbrace}} & \texttt{cv21=1} & V & 5 & yes \\
\texttt{U+0302} & \texttt{\detokenize{\widehat{...}}} & default & H & 37 & no \\
\texttt{U+0303} & \texttt{\detokenize{\widetilde{...}}} & default & H & 37 & no \\
\texttt{U+0305} & \texttt{\detokenize{\wideoverbar{...}}} & default & H & 3 & yes \\
\texttt{U+030C} & \texttt{\detokenize{\widecheck{...}}} & default & H & 35 & no \\
\texttt{U+2016} & \texttt{\detokenize{\Vert}} & default & V & 1 & yes \\
\texttt{U+20D6} & \texttt{\detokenize{\overleftarrow{...}}} & default & H & 0 & yes \\
\texttt{U+20D7} & \texttt{\detokenize{\overrightarrow{...}}} & default & H & 2 & yes \\
\texttt{U+2190} & \texttt{\detokenize{\leftarrow}} & default & H & 2 & yes \\
\texttt{U+2191} & \texttt{\detokenize{\uparrow}} & default & V & 1 & yes \\
\texttt{U+2192} & \texttt{\detokenize{\rightarrow}} & default & H & 2 & yes \\
\texttt{U+2193} & \texttt{\detokenize{\downarrow}} & default & V & 1 & yes \\
\texttt{U+2194} & \texttt{\detokenize{\leftrightarrow}} & default & H & 2 & yes \\
\texttt{U+2195} & \texttt{\detokenize{\updownarrow}} & default & V & 1 & yes \\
\texttt{U+21A6} & \texttt{\detokenize{\mapsto}} & default & H & 2 & no \\
\texttt{U+21D0} & \texttt{\detokenize{\Leftarrow}} & default & H & 2 & yes \\
\texttt{U+21D1} & \texttt{\detokenize{\Uparrow}} & default & V & 1 & yes \\
\texttt{U+21D2} & \texttt{\detokenize{\Rightarrow}} & default & H & 2 & yes \\
\texttt{U+21D3} & \texttt{\detokenize{\Downarrow}} & default & V & 1 & yes \\
\texttt{U+21D4} & \texttt{\detokenize{\Leftrightarrow}} & default & H & 2 & yes \\
\texttt{U+21D5} & \texttt{\detokenize{\Updownarrow}} & default & V & 1 & yes \\
\texttt{U+220F} & \texttt{\detokenize{\prod}} & default & V & 2 & no \\
\texttt{U+220F} & \texttt{\detokenize{\prod}} & \texttt{cv11=1} & V & 2 & no \\
\texttt{U+2210} & \texttt{\detokenize{\coprod}} & default & V & 2 & no \\
\texttt{U+2210} & \texttt{\detokenize{\coprod}} & \texttt{cv11=1} & V & 2 & no \\
\texttt{U+2211} & \texttt{\detokenize{\sum}} & default & V & 2 & no \\
\texttt{U+2211} & \texttt{\detokenize{\sum}} & \texttt{cv11=1} & V & 2 & no \\
\texttt{U+221A} & \texttt{\detokenize{\sqrt{...}}} & default & V & 5 & yes \\
\texttt{U+2223} & \texttt{\detokenize{\mid}} & default & V & 1 & yes \\
\texttt{U+2225} & \texttt{\detokenize{\parallel}} & default & V & 1 & yes \\
\texttt{U+222B} & \texttt{\detokenize{\int}} & default & V & 2 & no \\
\texttt{U+222C} & \texttt{\detokenize{\iint}} & default & V & 2 & no \\
\texttt{U+222D} & \texttt{\detokenize{\iiint}} & default & V & 2 & no \\
\texttt{U+222E} & \texttt{\detokenize{\oint}} & default & V & 2 & no \\
\texttt{U+222F} & \texttt{\detokenize{\oiint}} & default & V & 2 & no \\
\texttt{U+2230} & \texttt{\detokenize{\oiiint}} & default & V & 2 & no \\
\texttt{U+2231} & \texttt{\detokenize{\intclockwise}} & default & V & 2 & no \\
\texttt{U+2232} & \texttt{\detokenize{\varointclockwise}} & default & V & 2 & no \\
\texttt{U+2233} & \texttt{\detokenize{\ointctrclockwise}} & default & V & 2 & no \\
\texttt{U+22C0} & \texttt{\detokenize{\bigwedge}} & default & V & 2 & no \\
\texttt{U+22C0} & \texttt{\detokenize{\bigwedge}} & \texttt{cv12=1} & V & 2 & no \\
\texttt{U+22C1} & \texttt{\detokenize{\bigvee}} & default & V & 2 & no \\
\texttt{U+22C2} & \texttt{\detokenize{\bigcap}} & default & V & 2 & no \\
\texttt{U+22C3} & \texttt{\detokenize{\bigcup}} & default & V & 2 & no \\
\texttt{U+2308} & \texttt{\detokenize{\lceil}} & default & V & 5 & yes \\
\texttt{U+2309} & \texttt{\detokenize{\rceil}} & default & V & 5 & yes \\
\texttt{U+230A} & \texttt{\detokenize{\lfloor}} & default & V & 5 & yes \\
\texttt{U+230B} & \texttt{\detokenize{\rfloor}} & default & V & 5 & yes \\
\texttt{U+23AA} & \texttt{\detokenize{\vbraceextender}} & default & V & 1 & yes \\
\texttt{U+23B0} & \texttt{\detokenize{\lmoustache}} & default & V & 1 & yes \\
\texttt{U+23B1} & \texttt{\detokenize{\rmoustache}} & default & V & 1 & yes \\
\texttt{U+23DC} & \texttt{\detokenize{\overparen{...}}} & default & H & 24 & yes \\
\texttt{U+23DE} & \texttt{\detokenize{\overbrace{...}}} & default & H & 0 & yes \\
\texttt{U+23DE} & \texttt{\detokenize{\overbrace{...}}} & \texttt{cv24=1} & H & 0 & yes \\
\texttt{U+23DE} & \texttt{\detokenize{\overbrace{...}}} & \texttt{cv24=2} & H & 35 & yes \\
\texttt{U+23DF} & \texttt{\detokenize{\underbrace{...}}} & default & H & 0 & yes \\
\texttt{U+23DF} & \texttt{\detokenize{\underbrace{...}}} & \texttt{cv24=1} & H & 0 & yes \\
\texttt{U+23DF} & \texttt{\detokenize{\underbrace{...}}} & \texttt{cv24=2} & H & 35 & yes \\
\texttt{U+27E8} & \texttt{\detokenize{\langle}} & default & V & 5 & no \\
\texttt{U+27E9} & \texttt{\detokenize{\rangle}} & default & V & 5 & no \\
\texttt{U+27EE} & \texttt{\detokenize{\lgroup}} & default & V & 1 & yes \\
\texttt{U+27EF} & \texttt{\detokenize{\rgroup}} & default & V & 1 & yes \\
\texttt{U+2A00} & \texttt{\detokenize{\bigodot}} & default & V & 2 & no \\
\texttt{U+2A01} & \texttt{\detokenize{\bigoplus}} & default & V & 2 & no \\
\texttt{U+2A02} & \texttt{\detokenize{\bigotimes}} & default & V & 2 & no \\
\texttt{U+2A03} & \texttt{\detokenize{\bigcupdot}} & default & V & 2 & no \\
\texttt{U+2A04} & \texttt{\detokenize{\biguplus}} & default & V & 2 & no \\
\texttt{U+2A06} & \texttt{\detokenize{\bigsqcup}} & default & V & 2 & no \\
\texttt{U+2A0D} & \texttt{\detokenize{\intbar}} & default & V & 2 & no \\
\texttt{U+2A0F} & \texttt{\detokenize{\fint}} & default & V & 2 & no \\
\end{longtable}\endgroup

The engine compares its size request with MATH AdvanceMeasurement.
This is a selection dimension and need not equal the glyph's ink extent.
Default delimiters and radicals use the ordinary source sequence;
\file{cv22}/\file{cv23} select larger delimiter series.

\section{Metrics and MATH constants}\label{sec:scalars}
\subsection{Glyph metrics}
The output uses 1000 units per em. For an untransformed MTPro2 glyph,
the TFM width supplies its advance and the TFM italic correction supplies
its MATH italic correction.
Ordinary GPOS pair adjustments store the TFM pair kern without an added italic-correction term.
Skewchar pairs are excluded from
ordinary kerning; scripts, primes and accents have separate positioning
data. Top-accent attachment for source math alphabets is based on
\[
  \frac{\operatorname{CHARWD}+\operatorname{CHARIC}}{2}
  + \operatorname{skewkern}.
\]
For untransformed source alphabets, the calculation uses the exact TFM
fixed-point values and is rounded once to output units. Combining accents
and synthesized forms use the corresponding coordinate transformations
and geometric attachment positions. Text, script and scriptscript designs use the source
optical sizes.

\subsection{Constants}
The following assignments define the 56 MATH constants and the common
connector overlap in both editions. They combine source metrics, package
script ratios and conversion policies.

The expressions follow \file{tools/native_math.py} in evaluation order.
\texttt{round} uses nearest-integer rounding, ties to even; \texttt{//} is
floor division and \texttt{Fraction(a,b)} is exact rational arithmetic.
Intermediate rounding is part of each assignment.

\texttt{upm} is the output units per em. \texttt{s(i)} is
\texttt{round(sy[i] * upm)}, with \texttt{sy} from \file{mt2syt.tfm};
\texttt{e(i)} uses \file{mt2exa.tfm}. \texttt{theta = e(8)} and
\texttt{xh = s(5)}. \texttt{script\_sy} comes from \file{mt2sys.tfm}.
The script ratios are the \file{mtpro2.sty} defaults;
\texttt{\_pct(r)} is \texttt{round(r.numerator * 100 / r.denominator)}.

\texttt{display\_operator\_min\_height} is computed from the 30 mapped
text/display operator pairs in \file{mt2exa.tfm}. Round each height-plus-depth
to output units, then take
\texttt{(max(text sizes) + min(display sizes)) // 2}.
The source values give \texttt{(1103 + 1203) // 2 = 1153}.
The delimited-subformula threshold uses the same value. This is a conversion
policy; TFM box dimensions and OpenType glyph bounds need not select the
same design in every series.

\texttt{cap\_height} is the TFM height of \texttt{A} (slot \texttt{0x41})
in \file{mt2mit.tfm}, before conversion to output units.
Where MATH provides only one shift for display and inline superscripts,
the display value is used. Fields with separate display values retain both.
MathLeading uses the median of the em-normalized Latin Modern Math,
STIX Two Math and Cambria Math reference values. These fonts are not
build dependencies.

Source labels: MT-TFM, TFM parameters; MT-STY, package declarations;
MT-PFB, outlines; OT-SUG, OpenType suggested formulas; TeX, the script-space
convention; OT-MIG and MT-MIG, conversion policies. Combined labels indicate
that both source data and an assignment policy contribute.

Values are in font units except the script and radical-degree percentages.
The initial connector overlap is reduced to the nonnegative integer minimum
joining run when required by outline geometry. Both connector ends of
repeatable parts participate; fixed outside ends do not.

\begingroup
\small
\setlength{\tabcolsep}{4pt}
\begin{longtable}{@{}p{0.46\linewidth}p{0.48\linewidth}@{}}
\toprule
Field & Expression and source class \\
\midrule
\endfirsthead
\toprule
Field & Expression and source class \\
\midrule
\endhead
\bottomrule
\endfoot
\texttt{Axis\allowbreak Height} & \texttt{s(22)}\newline MT-TFM \\
\texttt{Fraction\allowbreak Numerator\allowbreak Shift\allowbreak Up} & \texttt{s(9)}\newline MT-TFM \\
\texttt{Fraction\allowbreak Numerator\allowbreak Display\allowbreak Style\allowbreak Shift\allowbreak Up} & \texttt{s(8)}\newline MT-TFM \\
\texttt{Fraction\allowbreak Denominator\allowbreak Shift\allowbreak Down} & \texttt{s(12)}\newline MT-TFM \\
\texttt{Fraction\allowbreak Denominator\allowbreak Display\allowbreak Style\allowbreak Shift\allowbreak Down} & \texttt{s(11)}\newline MT-TFM \\
\texttt{Fraction\allowbreak Numerator\allowbreak Gap\allowbreak Min} & \texttt{theta}\newline OT-SUG+MT \\
\texttt{Fraction\allowbreak Num\allowbreak Display\allowbreak Style\allowbreak Gap\allowbreak Min} & \texttt{3 \allowbreak * theta}\newline OT-SUG+MT \\
\texttt{Fraction\allowbreak Denominator\allowbreak Gap\allowbreak Min} & \texttt{theta}\newline OT-SUG+MT \\
\texttt{Fraction\allowbreak Denom\allowbreak Display\allowbreak Style\allowbreak Gap\allowbreak Min} & \texttt{3 \allowbreak * theta}\newline OT-SUG+MT \\
\texttt{Fraction\allowbreak Rule\allowbreak Thickness} & \texttt{theta}\newline MT-TFM \\
\texttt{Stack\allowbreak Top\allowbreak Shift\allowbreak Up} & \texttt{s(10)}\newline MT-TFM \\
\texttt{Stack\allowbreak Top\allowbreak Display\allowbreak Style\allowbreak Shift\allowbreak Up} & \texttt{s(8)}\newline MT-TFM \\
\texttt{Stack\allowbreak Bottom\allowbreak Shift\allowbreak Down} & \texttt{s(12)}\newline MT-TFM \\
\texttt{Stack\allowbreak Bottom\allowbreak Display\allowbreak Style\allowbreak Shift\allowbreak Down} & \texttt{s(11)}\newline MT-TFM \\
\texttt{Stack\allowbreak Gap\allowbreak Min} & \texttt{3 \allowbreak * theta}\newline OT-SUG+MT \\
\texttt{Stack\allowbreak Display\allowbreak Style\allowbreak Gap\allowbreak Min} & \texttt{7 \allowbreak * theta}\newline OT-SUG+MT \\
\texttt{Superscript\allowbreak Shift\allowbreak Up} & \texttt{s(13)}\newline MT-TFM+OT-MIG \\
\texttt{Superscript\allowbreak Shift\allowbreak Up\allowbreak Cramped} & \texttt{s(15)}\newline MT-TFM \\
\texttt{Subscript\allowbreak Shift\allowbreak Down} & \texttt{s(17)}\newline MT-TFM+OT-MIG \\
\texttt{Subscript\allowbreak Top\allowbreak Max} & \texttt{round(Fraction(4,\allowbreak 5) \allowbreak * s(5))}\newline OT-SUG+MT \\
\texttt{Superscript\allowbreak Bottom\allowbreak Min} & \texttt{round(Fraction(1,\allowbreak 4) \allowbreak * s(5))}\newline OT-SUG+MT \\
\texttt{Superscript\allowbreak Bottom\allowbreak Max\allowbreak With\allowbreak Subscript} & \texttt{round(Fraction(4,\allowbreak 5) \allowbreak * s(5))}\newline OT-SUG+MT \\
\texttt{Sub\allowbreak Superscript\allowbreak Gap\allowbreak Min} & \texttt{4 \allowbreak * theta}\newline OT-SUG+MT \\
\texttt{Upper\allowbreak Limit\allowbreak Baseline\allowbreak Rise\allowbreak Min} & \texttt{e(11)}\newline OT-MIG+MT \\
\texttt{Upper\allowbreak Limit\allowbreak Gap\allowbreak Min} & \texttt{e(9)}\newline OT-MIG+MT \\
\texttt{Lower\allowbreak Limit\allowbreak Gap\allowbreak Min} & \texttt{e(10)}\newline MT-TFM \\
\texttt{Lower\allowbreak Limit\allowbreak Baseline\allowbreak Drop\allowbreak Min} & \texttt{e(12)}\newline MT-TFM \\
\texttt{Stretch\allowbreak Stack\allowbreak Top\allowbreak Shift\allowbreak Up} & \texttt{e(11)}\newline OT-MIG+MT \\
\texttt{Stretch\allowbreak Stack\allowbreak Gap\allowbreak Above\allowbreak Min} & \texttt{e(9)}\newline OT-MIG+MT \\
\texttt{Stretch\allowbreak Stack\allowbreak Gap\allowbreak Below\allowbreak Min} & \texttt{e(10)}\newline OT-MIG+MT \\
\texttt{Stretch\allowbreak Stack\allowbreak Bottom\allowbreak Shift\allowbreak Down} & \texttt{e(12)}\newline OT-MIG+MT \\
\texttt{Overbar\allowbreak Rule\allowbreak Thickness} & \texttt{theta}\newline MT-TFM \\
\texttt{Overbar\allowbreak Vertical\allowbreak Gap} & \texttt{3 \allowbreak * theta}\newline OT-SUG+MT \\
\texttt{Overbar\allowbreak Extra\allowbreak Ascender} & \texttt{theta}\newline OT-SUG+MT \\
\texttt{Underbar\allowbreak Rule\allowbreak Thickness} & \texttt{theta}\newline MT-TFM \\
\texttt{Underbar\allowbreak Vertical\allowbreak Gap} & \texttt{3 \allowbreak * theta}\newline OT-SUG+MT \\
\texttt{Underbar\allowbreak Extra\allowbreak Descender} & \texttt{theta}\newline OT-SUG+MT \\
\texttt{Radical\allowbreak Rule\allowbreak Thickness} & \texttt{theta}\newline MT-TFM \\
\texttt{Radical\allowbreak Extra\allowbreak Ascender} & \texttt{theta}\newline OT-SUG+MT \\
\texttt{Radical\allowbreak Vertical\allowbreak Gap} & \texttt{theta + theta // 4}\newline OT-SUG+MT \\
\texttt{Radical\allowbreak Display\allowbreak Style\allowbreak Vertical\allowbreak Gap} & \texttt{theta + xh // 4}\newline OT-SUG+MT \\
\texttt{Radical\allowbreak Kern\allowbreak Before\allowbreak Degree} & \texttt{round(Fraction(5,\allowbreak 18) \allowbreak * upm)}\newline OT-SUG \\
\texttt{Radical\allowbreak Kern\allowbreak After\allowbreak Degree} & \texttt{-round(Fraction(10,\allowbreak 18) \allowbreak * upm)}\newline OT-SUG \\
\texttt{Radical\allowbreak Degree\allowbreak Bottom\allowbreak Raise\allowbreak Percent} & \texttt{60}\newline OT-SUG \\
\texttt{Script\allowbreak Percent\allowbreak Scale\allowbreak Down} & \texttt{\_pct(script\_ratio)}\newline MT-STY \\
\texttt{Script\allowbreak Script\allowbreak Percent\allowbreak Scale\allowbreak Down} & \texttt{\_pct(scriptscript\_ratio)}\newline MT-STY \\
\texttt{Min\allowbreak Connector\allowbreak Overlap} & \texttt{100}\newline OT-MIG+MT-PFB \\
\texttt{Accent\allowbreak Base\allowbreak Height} & \texttt{xh}\newline MT-TFM \\
\texttt{Flattened\allowbreak Accent\allowbreak Base\allowbreak Height} & \texttt{round(cap\_height \allowbreak * upm)}\newline MT-TFM \\
\texttt{Delimited\allowbreak Sub\allowbreak Formula\allowbreak Min\allowbreak Height} & \texttt{int(display\_operator\_min\_height)}\newline MT-MIG+MT \\
\texttt{Display\allowbreak Operator\allowbreak Min\allowbreak Height} & \texttt{int(display\_operator\_min\_height)}\newline MT-TFM+OT-MIG \\
\texttt{Math\allowbreak Leading} & \texttt{150}\newline OT-MIG \\
\texttt{Skewed\allowbreak Fraction\allowbreak Horizontal\allowbreak Gap} & \texttt{350}\newline OT-MIG \\
\texttt{Skewed\allowbreak Fraction\allowbreak Vertical\allowbreak Gap} & \texttt{102}\newline OT-MIG \\
\texttt{Space\allowbreak After\allowbreak Script} & \texttt{round(Fraction(1,\allowbreak 20) \allowbreak * upm)}\newline TeX \\
\texttt{Subscript\allowbreak Baseline\allowbreak Drop\allowbreak Min} & \texttt{round(script\_sy[19] \allowbreak * float(script\_ratio) \allowbreak * upm)}\newline MT-TFM+OT-MIG \\
\texttt{Superscript\allowbreak Baseline\allowbreak Drop\allowbreak Max} & \texttt{round(script\_sy[18] \allowbreak * float(script\_ratio) \allowbreak * upm)}\newline MT-TFM+OT-MIG \\
\end{longtable}
\endgroup

\section{Roman donor coverage}\label{sec:donors}
The minimal donor contract contains 317 inputs: 255 from Regular and
62 from Bold, as defined in \file{tools/donor_scope.json}. Mathematical
bold upright Latin and digits use MTPro2 glyphs in the final font;
the Bold donor inputs remain part of the build's input requirements.
The ranges below list the Regular selection; donor and output Unicode
values are identical. Ranges include both endpoints.

Mathematical syntax can remap input characters. For a literal Lua math
input, use \file{\Umathchar 0 \symoperators "00E9\relax}, replacing the
Unicode value as needed. Upright Latin uses \file{\symup}; bold Latin
and digits use \file{\symbfup}, which selects the MTPro2 designs.

\begin{center}
\small
\begin{tabular}{@{}lll@{}}
\texttt{U+0022--U+0027} & \texttt{U+00D1--U+00D6} & \texttt{U+0154--U+0165} \\
\texttt{U+002A} & \texttt{U+00D9--U+00DD} & \texttt{U+0168--U+017E} \\
\texttt{U+002D} & \texttt{U+00E0--U+00E5} & \texttt{U+01FA--U+01FF} \\
\texttt{U+0040--U+005A} & \texttt{U+00E7--U+00EF} & \texttt{U+0218--U+021B} \\
\texttt{U+005E--U+007A} & \texttt{U+00F1--U+00F6} & \texttt{U+0237} \\
\texttt{U+007E} & \texttt{U+00F9--U+00FD} & \texttt{U+02C6} \\
\texttt{U+00A3} & \texttt{U+00FF--U+010F} & \texttt{U+02DC} \\
\texttt{U+00A5} & \texttt{U+0112--U+0125} & \texttt{U+1E80--U+1E85} \\
\texttt{U+00AE} & \texttt{U+0128--U+0131} & \texttt{U+1EF2--U+1EF3} \\
\texttt{U+00B0} & \texttt{U+0134--U+0137} & \texttt{U+2044} \\
\texttt{U+00B7} & \texttt{U+0139--U+013E} & \texttt{U+20AC} \\
\texttt{U+00C0--U+00C5} & \texttt{U+0143--U+0148} &  \\
\texttt{U+00C7--U+00CF} & \texttt{U+014C--U+0151} &  \\
\end{tabular}
\end{center}

\subsection{Extended coverage and eligibility}
Extended retains actually encoded Regular characters in U+0020--036F,
U+1E00--1EFF, U+2000--218F, U+2500--266F, U+301A--301B and U+FB00--FB06,
subject to MTPro2 ownership and edition restrictions. The following
ranges are excluded:
U+0370--03FF, U+0400--052F, U+2100--214F, U+2190--21FF,
U+2200--22FF, U+2300--23FF, U+25A0--25FF, U+27C0--27EF,
U+2980--2AFF and U+1D400--1D7FF. Exceptions U+2105, U+2116,
U+211E, U+2120, U+2121, U+2122 and U+212E remain subject to the same ownership and edition restrictions.
Primes U+2032--2037/U+2057, PUA U+E000--F8FF, U+FEFF/U+FFFD and
existing output names are reserved. Imported glyphs must have usable outlines and metrics.
The Bold donor requirements are unchanged by extended coverage.

The additional coverage depends on the donor pair.


\end{document}
