\NeedsTeXFormat{LaTeX2e}


%Package to simplify loading of newtxmath with a text font family such as newtxtext for all latex engines, or for newtxtext and an otf math package.
\def\fileversion{1.723}
\def\filedate{2023/07/30}
\ProvidesPackage{newtx}[%
\filedate\space v\fileversion (Michael Sharpe) latex and unicode latex support for newtxmath and a supported text font family, or for newtxtext and an otf math package]

\message{`newtx'v\fileversion,\space\filedate\space Integrated\space loading\space of\space newtxmath\space and\space a\space text\space font
\space for\space all\space latex\space engines\space (msharpe)}

\RequirePackage{fontenc,fontaxes}
\RequirePackage{ifthen,iftex,etoolbox,scalefnt}

% \textfrac macro for type1 libertine and libertinus 
\newcommand{\lbtntextfrac}[3][]{% like \lbtntextfrac[1]{7}{8}
  \mbox{%
    \ifthenelse{\not\equal{#1}{}}%Test for integer portion [optional #1]
      {\textlf{#1}\kern.1em}{}%         
    {\sustyle#2}% numerator
    \StrRight{#2}{1}[\@digit@]%
    % look for  1, 2, 3, 7, 8
    \ifcase\@digit@% 0
    \or%\kern.03em% 1
    \or\kern.04em% 2
    \or%\kern-.01em% 3
    \or\kern.04em% 4
    \or%\kern.01em% 5
    \or%\kern.01em% 6
    \or\kern-.06em% 7
     \or\kern.04em% 8
    %\or\kern-.02em% 9
   \fi%
%    \kern\ntx@foresolidus{\fontencoding{TS1}\selectfont\char"2F}%
%    \kern\ntx@aftsolidus%
    {\fontencoding{TS1}\selectfont\char"2F}%
	\StrLeft{#3}{1}[\@digit@]%
    % look for 1, 4, 7
    \ifcase\@digit@% 0
    \or%\kern -.02em% 1
    \or% 2
    \or% 3
    \or\kern -.06em% 4
    \or\kern -.02em% 5
    \or\kern-.03em% 6
    \or\kern .01em% 7
   \or%\kern .01em% 8
   \or\kern -.01em% 9
    \fi%
    {\destyle #3}%       denominator [#3]
  }%mbox
} % lbtntextfrac

% options for newtxmath as etoolbox internal list allowing \ifinlist
%\def\ntx@mathlstr{vecsep,amsthm,nosubscriptcorrection,subscriptcorrection,timesmathacc,varbb,vvarbb,nosymbolsc,noamssymbols,amssymbols,uprightscript,uprightGreek,slantedGreek,frenchmath,nonewtxmathopt,upint,smallerops,useBImacros,varg,varvw,noOT1}
\forcsvlist{\listadd\ntx@mathlst}{vecsep,amsthm,nosubscriptcorrection,subscriptcorrection,timesmathacc,varbb,vvarbb,nosymbolsc,noamssymbols,amssymbols,uprightscript,uprightGreek,slantedGreek,frenchmath,nonewtxmathopt,upint,smallerops,useBImacros,varg,varvw,noOT1}
%\show\ntx@mathlst

% Note that subscriptcorrectionfile is not on the list---we process it in this sty file
%\def\ntx@mathlst{}
%\ifinlist{amsthm}{\ntx@mathlst}{%
%\typeout{amsthm YES}}{ \typeout{amsthm NO}}

%\endinput

%\DeclareListParser*{\forcsvlist}{,}
%\@for\ntx@opt:=\ntx@mathlstr\do{%
%\listxadd{\ntx@mathlst}{\ntx@opt}}%
%\show\ntx@opt
%\show\ntx@mathlst
\RequirePackage{xstring}% must load this after \@for
% Needed for \StrLeft and \StrRight

%Enginecheck
%iftex's \iftutex is true for LuaTeX and XeTeX
\newif\ifntx@otftext
\iftutex\ntx@otftexttrue\fi 
\def\ntx@Mopt{}
\def\ntx@Topt{}

%%%%%%%%%%%%%%%%%%
 \RequirePackage{xkeyval}%
%\traceon
\DeclareOptionX*{% what to do with unknown options
\xifinlist{\CurrentOption}{\ntx@mathlst}
% true branch
{\xdef\ntx@Mopt{\ntx@Mopt \CurrentOption,}
\expandafter\PassOptionsToPackage\expandafter{\CurrentOption}{newtxmath}}
{%  false branch
\xdef\ntx@Topt{\ntx@Topt \CurrentOption,}\expandafter\PassOptionsToPackage\expandafter{\CurrentOption}{\ntx@TF}}
}%
%\traceoff
%%%%StartOptions
%\newif\ifntx@nofontspec 
% must load fontspec if unicode engine
\newif\ifntx@otfmath %\ntx@otfmathfalse % default is type1 math

\def\tx@divide#1#2{\strip@pt\dimexpr 1pt * (\dimexpr #1pt) / \dimexpr #2pt\relax\relax}
\newcommand*{\ntxtext@RM}{1}
\newcommand*{\ntxtext@SF}{1}
\newcommand*{\ntxtext@TT}{.88}
%\newcommand*{\ntxtext@llscale}{1}
%\newcommand*{\ntxtext@ttscale}{.85}
\newcommand*{\ntxtext@rm}{} % not understood by libertinus-otf
\newcommand*{\ntxtext@sf}{}% not understood by libertinus-otf


\newcommand*{\ntxtext@scale}{1}
\newcommand*{\ntxmath@scale}{1} 
\DeclareOptionX{scaled}[1]{\renewcommand*{\ntxtext@scale}{#1}\renewcommand*{\ntxmath@scale}{#1}}
\DeclareOptionX{scale}[1]{\renewcommand*{\ntxtext@scale}{#1}\renewcommand*{\ntxmath@scale}{#1}}
\DeclareOptionX{textscale}[1]{\renewcommand*{\ntxtext@scale}{#1}}
\DeclareOptionX{textscaled}[1]{\renewcommand*{\ntxtext@scale}{#1}}
\DeclareOptionX{mathscale}[1]{\renewcommand*{\ntxmath@scale}{#1}}
\DeclareOptionX{mathscaled}[1]{\renewcommand*{\ntxmath@scale}{#1}}
\DeclareOptionX{ScaleBaseRM}[]{\renewcommand*{\ntxtext@RM}{#1}}
\DeclareOptionX{ScaleBaseSF}[]{\renewcommand*{\ntxtext@SF}{#1}}
\DeclareOptionX{ScaleBaseTT}[]{\renewcommand*{\ntxtext@TT}{#1}}
\DeclareOptionX{llscale}[]{\renewcommand*{\ntxtext@llscale}{#1}}
\DeclareOptionX{ttscale}[]{\renewcommand*{\ntxtext@ttscale}{#1}}
\DeclareOptionX{rm}[true]{\renewcommand*{\ntxtext@rm}{#1}}
\DeclareOptionX{sf}[true]{\renewcommand*{\ntxtext@sf}{#1}}

\DeclareOptionX{type1}[true]{}% no effect now
%{%\@nameuse{if#1}\ntx@otftextfalse\fi}

\DeclareOptionX{type1text}[true]{} %no effect now
%{% same as type1--use type1 for text
%\@nameuse{if#1}\ntx@otftextfalse\fi}

\DeclareOptionX{nofontspec}[true]{} % no effect
%{\@nameuse{if#1}\ntx@nofontspectrue\fi}

\DeclareOptionX{otfmath}[true]{%
\@nameuse{if#1}\iftutex\ntx@otfmathtrue\fi\fi}

%\DeclareOptionX{no-math}[true]{%
%\@nameuse{if#1}\ntx@nomathtrue\fi}
%\DeclareOptionX{no-otfmath}[true]{% forces use of newtxmath
%\@nameuse{if#1}\ntx@nomathtrue\fi}

\DeclareOptionX{subscriptcorrectionfile}{\def\tx@subs{#1}\tx@subsfiletrue}

%\newif\ifntx@fourier
\def\ntx@dfltTF{newtxtext} % the default text font package name
\def\ntx@text{\let\ntx@TF=\ntx@dfltTF % the text font package name
\def\ntx@MF{} % option name for flavor of newtxmath 
\def\ntx@id{0} % identifier for font properties
\def\ntx@sc{ntx@scale} % macro name for scale factor in font package 
\def\ntx@minfam{minntx} %roman font, tabular lining fd, used in math
}
\ntx@text % set the default
\DeclareOptionX{libertine}[true]{%
	\@nameuse{if#1}\def\ntx@sc{LinuxLibertineT@scale}%
	\def\ntx@TF{libertine}\def\ntx@MF{libertine}
	\def\ntx@id{1}\def\ntx@minfam{MinLibertinus}\def\textlf##1{{\liningnums##1}}
\def\nustyle{\sufigures}\def\destyle{}\fi}
\DeclareOptionX{libertinus}[true]{%
\@nameuse{if#1}\def\ntx@sc{LibertinusSerif@scale}%
	\def\ntx@TF{libertinus}\def\ntx@MF{libertine}
\def\ntx@id{10}\def\ntx@minfam{MinLibertinus}
}
\DeclareOptionX{etbb}[true]{%
	\@nameuse{if#1}\def\ntx@TF{ETbb}\def\ntx@MF{libertine}
	\def\ntx@id{2}\def\ntx@minfam{minlibertine}\fi}
\DeclareOptionX{ebgaramond}[true]{\@nameuse{if#1}
	\def\ntx@sc{EBGaramond@scale}\def\ntx@TF{ebgaramond}
	\let\ntx@MF\ntx@TF\def\ntx@id{3}\def\ntx@minfam{minebgaramond}\fi}
\DeclareOptionX{MinionPro}[true]{\@nameuse{if#1}
	\def\ntx@sc{}\def\ntx@TF{MinionPro}\def\ntx@MF{minion}
	\def\ntx@id{4}\def\ntx@minfam{mincochineal}\def\ntx@TF{MinionPro}\fi}
\DeclareOptionX{minion}[true]{\@nameuse{if#1}
	\def\ntx@sc{}\def\ntx@TF{MinionPro}\def\ntx@MF{minion}
	\def\ntx@id{4}\def\ntx@minfam{mincochineal}\def\ntx@TF{MinionPro}\fi}
\DeclareOptionX{cochineal}[true]{\@nameuse{if#1}
	\def\ntx@sc{Cochineal@scale}\def\ntx@TF{cochineal}
	\let\ntx@MF\ntx@TF\def\ntx@id{5}\def\ntx@minfam{mincochineal}\fi}
\DeclareOptionX{garamondx}[true]{\@nameuse{if#1}
	\def\ntx@sc{zgm@Scale}\def\ntx@TF{garamondx}
	\let\ntx@MF\ntx@TF
	\def\ntx@id{6}\def\ntx@minfam{minzgm}\fi}
\DeclareOptionX{baskerville}[true]{\@nameuse{if#1}
	\def\ntx@sc{BaskervilleF@scale}\def\ntx@TF{baskervillef}
	\let\ntx@MF\ntx@TF\def\ntx@id{7}\def\ntx@minfam{minbaskervillef}\fi}
\DeclareOptionX{Baskerville}[true]{\@nameuse{if#1}
	\def\ntx@sc{BaskervilleF@scale}\def\ntx@TF{baskervillef}
	\let\ntx@MF\ntx@TF\def\ntx@id{7}\def\ntx@minfam{minbaskervillef}\fi}
\DeclareOptionX{baskervillef}[true]{\@nameuse{if#1}
	\def\ntx@sc{BaskervilleF@scale}\def\ntx@TF{baskervillef}
	\let\ntx@MF\ntx@TF\def\ntx@id{7}\def\ntx@minfam{minbaskervillef}\fi}
\DeclareOptionX{BaskervilleF}[true]{\@nameuse{if#1}
	\def\ntx@sc{BaskervilleF@scale}\def\ntx@TF{baskervillef}
	\let\ntx@MF\ntx@TF\def\ntx@id{7}\def\ntx@minfam{minbaskervillef}\fi}
\DeclareOptionX{baskervaldx}[true]{\@nameuse{if#1}
	\def\ntx@sc{Baskervaldx@scale}\def\ntx@TF{baskervaldx}
	\let\ntx@MF\ntx@TF\def\ntx@id{8}\def\ntx@minfam{minbaskervaldx}\fi}
\DeclareOptionX{Baskervaldx}[true]{\@nameuse{if#1}
	\def\ntx@sc{Baskervaldx@scale}\def\ntx@TF{baskervaldx}
	\let\ntx@MF\ntx@TF\def\ntx@id{8}\def\ntx@minfam{minbaskervaldx}\fi}
%\DeclareOptionX{utopia}[true]{%
%	\@nameuse{if#1}\def\ntx@TF{utopia}\let\ntx@MF\ntx@TF\def\ntx@id{0}\def\ntx@minfam{}\fi}
\DeclareOptionX{heuristica}[true]{\@nameuse{if#1}
	\def\ntx@sc{Heuristica@scale}%
	\def\ntx@TF{heuristica}\def\ntx@MF{utopia}
	\def\ntx@id{9}\def\ntx@minfam{minheuristica}\fi}
\DeclareOptionX{Heuristica}[true]{\@nameuse{if#1}
	\def\ntx@sc{Heuristica@scale}%
	\def\ntx@TF{heuristica}\def\ntx@MF{utopia}
	\def\ntx@id{9}\def\ntx@minfam{minheuristica}\fi}
\DeclareOptionX{erewhon}[true]{\@nameuse{if#1}
	\def\ntx@sc{erewhon@scale}\def\ntx@TF{erewhon}\def\ntx@MF{utopia}
	\def\ntx@id{11}\def\ntx@minfam{minerewhon}\fi}
\DeclareOptionX{Erewhon}[true]{\@nameuse{if#1}
	\def\ntx@sc{erewhon@scale}\def\ntx@TF{erewhon}\def\ntx@MF{utopia}
	\def\ntx@id{11}\def\ntx@minfam{minerewhon}\fi}
\DeclareOptionX{XCharter}[true]{\@nameuse{if#1}
	\def\ntx@sc{XCharter@scale}\def\ntx@TF{XCharter}
	\def\ntx@MF{xcharter}\def\ntx@id{12}\def\ntx@minfam{minxcharter}\fi}
\DeclareOptionX{xcharter}[true]{\@nameuse{if#1}
	\def\ntx@sc{XCharter@scale}\def\ntx@TF{XCharter}
	\def\ntx@MF{xcharter}\def\ntx@id{12}\def\ntx@minfam{minxcharter}\fi}
\DeclareOptionX{Stickstoo}[true]{\@nameuse{if#1}
	\def\ntx@sc{SticksTooText@scale}%
	\def\ntx@TF{stickstootext}\def\ntx@MF{stickstoo}
	\def\ntx@id{13}\def\ntx@minfam{minstickstootext}\fi}
\DeclareOptionX{stickstoo}[true]{\@nameuse{if#1}
	\def\ntx@sc{SticksTooText@scale}%
	\def\ntx@TF{stickstootext}\def\ntx@MF{stickstoo}
	\def\ntx@id{13}\def\ntx@minfam{minstickstootext}\fi}
\DeclareOptionX{stix2}[true]{\@nameuse{if#1}
	\def\ntx@sc{SticksTooText@scale}%
	\def\ntx@TF{stickstootext}\def\ntx@MF{stickstoo}
	\def\ntx@id{13}\def\ntx@minfam{minstickstootext}\fi}
\DeclareOptionX{scholax}[true]{\@nameuse{if#1}
	\def\ntx@sc{TeXGyreScholaX@scale}%
	\def\ntx@TF{scholax}\def\ntx@MF{nc}
	\def\ntx@id{14}\def\ntx@minfam{minscholax}\fi}
\DeclareOptionX{nc}[true]{\@nameuse{if#1}
	\def\ntx@sc{TeXGyreScholaX@scale}%
	\def\ntx@TF{scholax}\def\ntx@MF{nc}
	\def\ntx@id{14}\def\ntx@minfam{minscholax}\fi}
\DeclareOptionX{scholaxf}[true]{\@nameuse{if#1}
	\def\ntx@sc{TeXGyreScholaX@scale}%
	\def\ntx@TF{scholax}\def\ntx@MF{nc}
	\def\ntx@id{14}\def\ntx@minfam{minscholax}\fi}
\DeclareOptionX{ncf}[true]{\@nameuse{if#1}
	\def\ntx@sc{TeXGyreScholaX@scale}%
	\def\ntx@TF{scholax}\def\ntx@MF{nc}
	\def\ntx@id{14}\def\ntx@minfam{minscholax}\fi}
% for stacked fractions
\DeclareOptionX{sfracvcenter}{%
\def\tx@sfrVC{#1}}
\DeclareOptionX{sfracvspacing}{%
\def\tx@sfrVS{#1}}
\DeclareOptionX{sfracbarthick}{%
\def\tx@sfrTH{#1}}
\DeclareOptionX{sfracscaling}{%
\def\tx@sfrSC{#1}}
% \ntx@Topt contains all unknown options that are not math options. It contains no scale options. \ntx@Mopt lists all the math options.
\ProcessOptionsX\relax 
%\show\ntx@Mopt
%\show\ntx@Topt
%\traceon
% Check for conflict between nofontspec and others
%\ifntx@nofontspec
%  \iftutex
%  	\ntx@otfmathfalse
%	\ntx@otftextfalse
%  \fi
%\fi
\ifntx@otfmath
   \ifnum\ntx@id>0
     \PackageWarning{newtx.sty}{Reverting to newtxtext: newtx with option {\tt otfmath} can not handle other text packages.}
     \ntx@id=0
     \ntx@text % revert to newtxtext
\fi\fi

%\ifntx@badnof\PackageError{newtx.sty}{Incompatible options, nofontspec and otfmath}{Incompatible options, nofontspec and otfmath}\fi
% Set the text scale macros appropriately
%\show\ntx@TF
\PassOptionsToPackage{scaled=\ntxmath@scale}{newtxmath}
%\PassOptionsToPackage{scaled=\ntxtext@scale}{\ntx@TF}
\edef\ntxmath@scaled{s*[\ntxmath@scale]}
% For the min text fd files, need to use actual scale macro passed to fd?
%\@namedef{\ntx@sc}{\ntxtext@scale}

\newif\ifntx@iszero
\@tempdima\@ne\p@\@tempdima\ntxtext@scale\@tempdima
\expandafter\ifnum\number\@tempdima=0\relax\ntx@iszerotrue\fi
%

\newcommand{\PassMathScale}{\ifntx@iszero\gdef\ntxtext@scale{\ntxmath@scale}\gdef\ntxtext@scaled{s*[\ntxtext@scale]}\fi
\ifnum\ntx@id=4 % MinionPro
  \PassOptionsToPackage{scale=\ntxtext@scale}{\ntx@TF}
\else
  \ifnum\ntx@id=10 %libertinus
    \@tempdima=\ntxtext@scale\p@
	\@tempdimb=\ntxtext@RM\@tempdima
		  \PassOptionsToPackage{ScaleRM=\strip@pt\@tempdimb}{\ntx@TF}
	  	  \@tempdimb=\ntxtext@SF\@tempdima
		  \PassOptionsToPackage{ScaleSF=\strip@pt\@tempdimb}{\ntx@TF}
		  \@tempdimb=\ntxtext@TT\@tempdima
		  \PassOptionsToPackage{ScaleTT=\strip@pt\@tempdimb}{\ntx@TF}
  \else
      \ifnum\ntx@id=1 %libertine
      	  \@tempdima=\ntxtext@scale\p@
		  \@tempdimb=\ntxtext@RM\@tempdima
		  \PassOptionsToPackage{llscale=\strip@pt\@tempdimb}{\ntx@TF}
	  	  \@tempdimb=\ntxtext@SF\@tempdima
		  \PassOptionsToPackage{scale=\strip@pt\@tempdimb}{\ntx@TF}
		  \@tempdimb=\ntxtext@TT\@tempdima
		  \PassOptionsToPackage{ttscale=\strip@pt\@tempdimb}{\ntx@TF}

      \else % 
		  \PassOptionsToPackage{scaled=\ntxtext@scale}{\ntx@TF}
	  \fi
  \fi
\fi
}
%
\newcommand{\PassMatchingScale}[1]{%
  \ifntx@iszero%
    \@tempdima #1\p@ \@tempdima\ntxmath@scale\@tempdima		  \xdef\ntxtext@scale{\strip@pt\@tempdima}
    \gdef\ntxtext@scaled{s*[\ntxtext@scale]}
  \fi
  \PassOptionsToPackage{scaled=\ntxtext@scale}{\ntx@TF}%
}
%\fi

\ifcase\ntx@id % 0, newtxtext
\PassMathScale
% info for sfrac (stacked fractions) involving newtxtext
\@ifundefined{tx@xht}{\def\tx@xht{450}}{} % lowercase letters
\@ifundefined{tx@deht}{\def\tx@deht{406}}{} % denominator figures ht
\@ifundefined{tx@nubase}{\def\tx@nubase{270}}{} % baseline of numerators
\@ifundefined{tx@debase}{\def\tx@debase{0}}{} % baseline of denoms
\@ifundefined{tx@sfrVC}{\def\tx@sfrVC{331}}{}% vertical center of sfrac
\@ifundefined{tx@sfrVS}{\def\tx@sfrVS{106}}{} % space above/below bar
\@ifundefined{tx@sfrTH}{\def\tx@sfrTH{54}}{} % bar thickness
\@ifundefined{tx@sfrSC}{\def\tx@sfrSC{.8}}{} % scale defigures by this
\or %1, libertine
\PassMathScale
% \PassOptionsToPackage{ttscaled=\ntxtext@scale,
% llscaled=\ntxtext@scale}{\ntx@TF} % for tt and serifed in Libertine
\@ifundefined{tx@xht}{\def\tx@xht{431}}{} % lowercase letters
\@ifundefined{tx@deht}{\def\tx@deht{328}}{} % denominator figures ht
\@ifundefined{tx@nubase}{\def\tx@nubase{365}}{} % baseline of numerators
\@ifundefined{tx@debase}{\def\tx@debase{365}}{} % baseline of denoms
\@ifundefined{tx@sfrVC}{\def\tx@sfrVC{305}}{}% vertical center of sfrac
\@ifundefined{tx@sfrVS}{\def\tx@sfrVS{100}}{} % space above/below bar
\@ifundefined{tx@sfrTH}{\def\tx@sfrTH{46}}{} % bar thickness
\@ifundefined{tx@sfrSC}{\def\tx@sfrSC{.9}}{} % scale defigures by this 
%\def\destyle{\sufigures} \def\nustyle{\sufigures}
%\iflibertine@otf%
%\providecommand{\textfrac}[3][]{{%
%\mbox{%
%    \ifthenelse{\not\equal{#1}{}}%Test for integer portion [optional #1]
%      {\textlf{#1}\kern.02em}{}%         
%{\addfontfeature{RawFeature=+frac}#2/#3}}%
%}}
\or % 2, etbb
\PassMathScale
\@ifundefined{tx@xht}{\def\tx@xht{431}}{} % lowercase letters
\@ifundefined{tx@deht}{\def\tx@deht{357}}{} % denominator figures ht
\@ifundefined{tx@nubase}{\def\tx@nubase{295}}{} % baseline of numerators
\@ifundefined{tx@debase}{\def\tx@debase{0}}{} % baseline of denoms
\@ifundefined{tx@sfrVC}{\def\tx@sfrVC{331}}{}% vertical center of sfrac
\@ifundefined{tx@sfrVS}{\def\tx@sfrVS{106}}{} % space above/below bar
\@ifundefined{tx@sfrTH}{\def\tx@sfrTH{64}}{} % bar thickness
\@ifundefined{tx@sfrSC}{\def\tx@sfrSC{.8}}{} % scale defigures by this
\or % 3, ebgaramond
\PassMatchingScale{1.05}
\@ifundefined{tx@xht}{\def\tx@xht{431}}{} % lowercase letters
\@ifundefined{tx@deht}{\def\tx@deht{341}}{} % denominator figures ht
\@ifundefined{tx@nubase}{\def\tx@nubase{443}}{} % baseline of numerators
\@ifundefined{tx@debase}{\def\tx@debase{-143}}{} % baseline of denoms
\@ifundefined{tx@sfrVC}{\def\tx@sfrVC{318}}{}% vertical center of sfrac
\@ifundefined{tx@sfrVS}{\def\tx@sfrVS{90}}{} % space above/below bar
\@ifundefined{tx@sfrTH}{\def\tx@sfrTH{46}}{} % bar thickness
\@ifundefined{tx@sfrSC}{\def\tx@sfrSC{.9}}{} % scale defigures by this 

%\iflibertine@otf%
%\providecommand{\textfrac}[3][]{{%
%{{%
% \mbox{%
%    \ifthenelse{\not\equal{#1}{}}%Test for integer portion [optional #1]
%      {\textlf{#1}\kern.02em}{}%         
%{\addfontfeature{RawFeature=+frac}#2/#3}}%
%}}}}
\or % 4, MinionPro
\PassMathScale
%\@ifundefined{tx@xht}{\def\tx@xht{437}}{} % lowercase letters
%\@ifundefined{tx@deht}{\def\tx@deht{359}}{} % denominator figures ht
%\@ifundefined{tx@nubase}{\def\tx@nubase{277}}{} % baseline of numerators
%\@ifundefined{tx@debase}{\def\tx@debase{0}}{} % baseline of denoms
%\@ifundefined{tx@sfrVC}{\def\tx@sfrVC{317}}{}% vertical center of sfrac
%\@ifundefined{tx@sfrVS}{\def\tx@sfrVS{106}}{} % space above/below bar
%\@ifundefined{tx@sfrTH}{\def\tx@sfrTH{54}}{} % bar thickness
%\@ifundefined{tx@sfrSC}{\def\tx@sfrSC{.9}}{} % scale defigures by this 
\or % 5, cochineal
\PassMathScale
\@ifundefined{tx@xht}{\def\tx@xht{430}}{} % lowercase letters
\@ifundefined{tx@deht}{\def\tx@deht{378}}{} % denominator figures ht
\@ifundefined{tx@nubase}{\def\tx@nubase{248}}{} % baseline of numerators
\@ifundefined{tx@debase}{\def\tx@debase{0}}{} % baseline of denoms
\@ifundefined{tx@sfrVC}{\def\tx@sfrVC{313}}{}% vertical center of sfrac
\@ifundefined{tx@sfrVS}{\def\tx@sfrVS{106}}{} % space above/below bar
\@ifundefined{tx@sfrTH}{\def\tx@sfrTH{54}}{} % bar thickness
\@ifundefined{tx@sfrSC}{\def\tx@sfrSC{.9}}{} % scale defigures by this amount
\or % 6, garamondx
\PassMatchingScale{.94}
\or % 7, BaskervilleF
\PassMathScale
\or % 8, baskervaldx
\PassMathScale
\or % 9, heuristica
\PassMatchingScale{.94}
\or % 10, libertinus
\PassMathScale
\@ifundefined{tx@xht}{\def\tx@xht{431}}{} % lowercase letters
\@ifundefined{tx@deht}{\def\tx@deht{324}}{} % denominator figures ht
\@ifundefined{tx@nubase}{\def\tx@nubase{364}}{} % baseline of numerators
\@ifundefined{tx@debase}{\def\tx@debase{-112}}{} % baseline of denoms
\@ifundefined{tx@sfrVC}{\def\tx@sfrVC{305}}{}% vertical center of sfrac
\@ifundefined{tx@sfrVS}{\def\tx@sfrVS{90}}{} % space above/below bar
\@ifundefined{tx@sfrTH}{\def\tx@sfrTH{46}}{} % bar thickness
\@ifundefined{tx@sfrSC}{\def\tx@sfrSC{.9}}{} % scale defigures by this 
%\def\destyle{\sufigures} \def\nustyle{\sufigures}
%\providecommand{\textfrac}[3][]{\textlf{#1}\kern.01em{\addfontfeature{RawFeature=+frac}#2/#3}}
%\iflibertine@otf%
%\providecommand{\textfrac}[3][]{{%
%{{%
% \mbox{%
%    \ifthenelse{\not\equal{#1}{}}%Test for integer portion [optional #1]
%      {\textlf{#1}\kern.02em}{}%         
%{\addfontfeature{RawFeature=+frac}#2/#3}}%
%}}}}
\or % 11, erewhon
\PassMathScale
\@ifundefined{tx@xht}{\def\tx@xht{461}}{} % lowercase letters
\@ifundefined{tx@deht}{\def\tx@deht{384}}{} % denominator figures ht
\@ifundefined{tx@nubase}{\def\tx@nubase{256}}{} % baseline of numerators
\@ifundefined{tx@debase}{\def\tx@debase{0}}{} % baseline of denoms
\@ifundefined{tx@sfrVC}{\def\tx@sfrVC{320}}{}% vertical center of sfrac
\@ifundefined{tx@sfrVS}{\def\tx@sfrVS{106}}{} % space above/below bar
\@ifundefined{tx@sfrTH}{\def\tx@sfrTH{58}}{} % bar thickness
\@ifundefined{tx@sfrSC}{\def\tx@sfrSC{.8}}{} % scale defigures by this 
\or % 12, XCharter
\PassMatchingScale{.98}
\@ifundefined{tx@xht}{\def\tx@xht{481}}{} % lowercase letters
\@ifundefined{tx@deht}{\def\tx@deht{382}}{} % denominator figures ht
\@ifundefined{tx@nubase}{\def\tx@nubase{295}}{} % baseline of numerators
\@ifundefined{tx@debase}{\def\tx@debase{0}}{} % baseline of denoms
\@ifundefined{tx@sfrVC}{\def\tx@sfrVC{341}}{}% vertical center of sfrac
\@ifundefined{tx@sfrVS}{\def\tx@sfrVS{106}}{} % space above/below bar
\@ifundefined{tx@sfrTH}{\def\tx@sfrTH{54}}{} % bar thickness
\@ifundefined{tx@sfrSC}{\def\tx@sfrSC{.8}}{} % scale defigures by this 
\or % 13, stickstoo
\PassMathScale
\@ifundefined{tx@xht}{\def\tx@xht{473}}{} % lowercase letters
\@ifundefined{tx@deht}{\def\tx@deht{411}}{} % denominator figures ht
\@ifundefined{tx@nubase}{\def\tx@nubase{252}}{} % baseline of numerators
\@ifundefined{tx@debase}{\def\tx@debase{0}}{} % baseline of denoms
\@ifundefined{tx@sfrVC}{\def\tx@sfrVC{320}}{}% vertical center of sfrac
\@ifundefined{tx@sfrVS}{\def\tx@sfrVS{106}}{} % space above/below bar
\@ifundefined{tx@sfrTH}{\def\tx@sfrTH{56}}{} % bar thickness
\@ifundefined{tx@sfrSC}{\def\tx@sfrSC{.75}}{} % scale defigures by this 
\or % 14, scholax
\PassMatchingScale{.93}
\@ifundefined{tx@xht}{\def\tx@xht{466}}{} % lowercase letters
\@ifundefined{tx@deht}{\def\tx@deht{423}}{} % denominator figures ht
\@ifundefined{tx@nubase}{\def\tx@nubase{289}}{} % baseline of numerators
\@ifundefined{tx@debase}{\def\tx@debase{-111}}{} % baseline of denoms
\@ifundefined{tx@sfrVC}{\def\tx@sfrVC{352}}{}% vertical center of sfrac
\@ifundefined{tx@sfrVS}{\def\tx@sfrVS{106}}{} % space above/below bar
\@ifundefined{tx@sfrTH}{\def\tx@sfrTH{70}}{} % bar thickness
\@ifundefined{tx@sfrSC}{\def\tx@sfrSC{.8}}{} % scale defigures by this 
\or % 15, scholax/fourier
\PassMatchingScale{.93}
\@ifundefined{tx@xht}{\def\tx@xht{466}}{} % lowercase letters
\@ifundefined{tx@deht}{\def\tx@deht{423}}{} % denominator figures ht
\@ifundefined{tx@nubase}{\def\tx@nubase{289}}{} % baseline of numerators
\@ifundefined{tx@debase}{\def\tx@debase{-111}}{} % baseline of denoms
\@ifundefined{tx@sfrVC}{\def\tx@sfrVC{352}}{}% vertical center of sfrac
\@ifundefined{tx@sfrVS}{\def\tx@sfrVS{106}}{} % space above/below bar
\@ifundefined{tx@sfrTH}{\def\tx@sfrTH{70}}{} % bar thickness
\@ifundefined{tx@sfrSC}{\def\tx@sfrSC{.8}}{} % scale defigures by this
\fi
\PassOptionsToPackage{\ntx@MF}{newtxmath}


%\ifblank{\ntx@textopt}{}%
%{\PassOptionsToPackage{\ntx@textopt}{\ntx@TF}}

\newdimen\tx@sixem\tx@sixem6pt % for checking if a number refers to ex
\newdimen\tx@y \newdimen\tx@x 

% convert numerical entry that may be multiple of ex (<6) or em value
\def\tx@toex#1{\tx@x#1pt \ifdim\tx@x<\z@\tx@y-\tx@x\else\tx@y\tx@x\fi \ifdim\tx@y>\tx@sixem \tx@x\dimexpr 1pt * (\dimexpr #1pt\relax) / \dimexpr \tx@xht pt\relax\relax\fi}

\newdimen\tx@tmpdima \newdimen\tx@tmpdimb  \newdimen\tx@tmpdimc
\newdimen\tx@tmpdimd \newdimen\tx@tmpdime \newdimen\tx@tmpdimf
\newdimen\tx@dimA
\newdimen\tx@dimAA \newdimen\tx@dimB \newdimen\tx@dimBB 
\newdimen\tx@dimC % vertical center
% double cap letters for below bar, single cap for above
\tx@toex\tx@sfrVC\tx@dimC\tx@x %Vertical center of fraction
\tx@toex\tx@sfrTH\tx@tmpdimb\tx@x % bar thickness
\tx@tmpdime.5\tx@tmpdimb % half bar thickness
\tx@toex\tx@sfrVS\tx@tmpdimc\tx@x% vertical space
\tx@toex\tx@deht\tx@tmpdimd\tx@x % height of unscaled figures
\tx@tmpdimd\tx@sfrSC\tx@tmpdimd % height of scaled figures
\tx@toex\tx@debase\tx@tmpdimf\tx@x % unscaled baseline of de figures
\tx@toex\tx@nubase\tx@tmpdima\tx@x % unscaled baseline of nu figures
\tx@tmpdima\tx@sfrSC\tx@tmpdima % scaled nu baseline
\tx@tmpdimf\tx@sfrSC\tx@tmpdimf % scaled de baseline
\tx@dimA\tx@dimC
\advance\tx@dimA by \tx@tmpdime % top of bar
\tx@dimAA\tx@dimC
\advance\tx@dimAA by -\tx@tmpdime % bottom of bar
\tx@dimB\tx@dimA
\advance\tx@dimB by \tx@tmpdimc % top figure baseline
\advance\tx@dimB by -\tx@tmpdima
\tx@dimBB\tx@dimAA
\advance\tx@dimBB by -\tx@tmpdimc % 
\advance\tx@dimBB by -\tx@tmpdimd % bottom figure baseline
\advance\tx@dimBB by -\tx@tmpdimf
\newcommand*{\textsfrac}[3][]{% like \textsfrac[1]{23}{34}
\mbox{%
    \ifthenelse{\not\equal{#1}{}}%Test for integer portion [optional #1]
      {\textlf{#1}\kern.04em}{}%         
	{\hmode@bgroup%
\ooalign{%
	\setbox0=\hbox{\scalefont{\tx@sfrSC}\nustyle#2}%
	\hfil \raise\strip@pt\tx@dimB ex\box0\hfil \crcr%
	\leaders\hrule height \strip@pt\tx@dimA ex depth -\strip@pt\tx@dimAA ex\hfill \crcr%
	\setbox1=\hbox{\scalefont{\tx@sfrSC}\destyle#3}%
	\hfil\raise\strip@pt\tx@dimBB ex\box1\hfil}%
\egroup}}
}


%\ifntx@otfmath\typeout{otf math}\else\typeout{type1 math}\fi


\ifntx@otftext
  \ifntx@otfmath %I
  \typeout{I}
    \usepackage[]{newtxtext} %may not load fontspec
    \RequirePackage{fontspec} % just in case
    \usepackage{unicode-math} %loads amsmath
  \else %II: type1 math, otftext
  \typeout{II}
    \renewcommand*{\rmdefault}{\ntx@minfam} % Roman and Bold text for math
    \usepackage[]{newtxmath} % options will be as passed from newtx
    \usepackage[no-math]{fontspec}
    \ifnum\ntx@id=10\relax % libertinus
      \usepackage[nomath]{\ntx@TF}
    \else
      \usepackage{\ntx@TF}
    \fi %\ifnum
  \fi %ifntx@otfmath
  %\show\ntx@otftexttrue
\else % not otftext
  \typeout{IV}
% IV, type1 tex and math
    \renewcommand*{\rmdefault}{\ntx@minfam}% Roman and Bold for math
     \usepackage{newtxmath} % options will be as passed from newtx
    \usepackage{\ntx@TF} % should load tt and sans math before newtx
\fi

%\traceoff
%%%%%%% End of preamble items
\AtEndPreamble{%
\providecommand{\textfrac}[3][]{{%
\mbox{%
    \ifthenelse{\not\equal{#1}{}}%Test for integer portion [optional #1]
      {\textlf{#1}\kern.02em}{}%         
{\ifntx@otftext\addfontfeature{RawFeature=+frac}#2/#3}
\else\textnu{#2}{\normalfont\fontencoding{TS1}\selectfont\char"2F}%
\textde{#3}\fi}
}}}


% Finally, add code to extend text packages after they load.
% This will depend on the particular package and the state
% of \ntx@otftext
\ifcase\ntx@id % 0, newtxtext
\or % 1, was libertine % switch to libertinus
	\let\sustyle\sufigures
	\let\nustyle\sufigures
	\let\textnu\textsup
	\let\textsu\textsup
 
	\def\minlibfamily{MinLibertinusSerif-Inf}
		\def\infigures{\@nomath\infigures\fontfamily{\minlibfamily}\selectfont}

	\let\instyle\infigures
	\let\destyle\infigures
	\let\defigures\infigures
	\DeclareTextFontCommand{\textinf}{\infigures}
	\let\textde\textinf

  \let\textfrac\lbtntextfrac
\or % 2, etbb
\or % 3, ebgaramond
  \def\destyle{\infigures} \def\nustyle{\sufigures}
  \def\textnu#1{{\sufigures#1}}
  \def\textde#1{{\infigures#1}}
  \ifntx@otftext
    \def\pliningnums{\addfontfeature{RawFeature=-tnum;-onum;+pnum;+lnum}}
  \else % type1
    \DeclareTextFontCommand{\pliningnums}{\fontfamily{EBGaramond-LF}\selectfont}
  \fi
  \def\textlf#1{{\pliningnums#1}}
\or % 4, MinionPro
\or % 5, cochineal
\or % 6, garamondx
\or % 7, BaskervilleF
\or % 8, baskervaldx
\or % 9, heuristica
\or % 10, libertinus
\ifntx@otftext%
 \def\textlf#1{{\addfontfeature{RawFeature=+lnum,RawFeature=+pnum}#1}}
  \let\sustyle\sufigures
  \let\nustyle\sufigures
  \DeclareTextFontCommand{\textsup}{\sufigures}\def\destyle{\addfontfeature{RawFeature=+subs}}
  \let\infstyle\destyle
  \let\infigures\destyle
  \DeclareTextFontCommand{\textinf}{\destyle}
  \newcommand{\textfrac}[3][]{%
	\mbox{%
    \ifthenelse{\not\equal{#1}{}}%Test for integer portion [optional #1]
      {\textlf{#1}\kern.1em}{}\Lfrac{#2/#3}}}

\else % type1
	\let\sustyle\sufigures
	\let\nustyle\sufigures
	\let\textnu\textsup
	\let\textsu\textsup
 
	\def\minlibfamily{MinLibertinusSerif-Inf}
		\def\infigures{\@nomath\infigures\fontfamily{\minlibfamily}\selectfont}

	\let\instyle\infigures
	\let\destyle\infigures
	\let\defigures\infigures
	\DeclareTextFontCommand{\textinf}{\infigures}
	\let\textde\textinf
	\def\textlf#1{{\LibertinusSerifLF#1}}

  \let\textfrac\lbtntextfrac
\fi
%      \fa@naming@exception{figures}{{inferior}{proportional}}{Inf}
%      \fa@naming@exception{figures}{{inferior}{tabular}}{Inf}
%      \def\infigures{\@nomath\infigures\fontfigurestyle{inferior}\selectfont}
%      \DeclareTextFontCommand{\textinf}{\infigures}
%      \let\destyle\infigures
%      \let\textde\textinf
	% \sufigures and \textsup from libertinus-type1.sty

\or % 11, erewhon
\or % 12, XCharter
\or % 13, stickstoo
\or % 14, scholax
\or % 15, scholax/fourier
\fi

\endinput
