\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.739} \def\filedate{2024/02/24} \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,propmathfigs,curlybraces,cochrho,cochf,alty,alth,liby,nochvw} %\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\relax) / \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}} \newif\iftx@helv \tx@helvtrue \newif\iftx@tt \tx@tttrue \DeclareOptionX{nohelv}[true]{% \@nameuse{if#1}\tx@helvfalse\fi} \DeclareOptionX{nott}[true]{% \@nameuse{if#1}\tx@ttfalse\fi} \def\tx@helvratio{.94} \DeclareOptionX{helvratio}[0.94]{% \def\tx@helvratio{#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}% \def\ntx@sc{ETbb@scale}\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 \else % t1 math \ifnum\ntx@id=0 \ifthenelse{\not\equal{\sfdefault}{cmss}}% {\tx@helvfalse}{} \ifthenelse{\not\equal{\ttdefault}{cmtt}}% {\tx@ttfalse}{} \iftx@helv \renewcommand*{\sfdefault}{qhv} \@tempdima=\ntxtext@scale\p@ \@tempdima=\tx@helvratio\@tempdima% \edef\qhv@scale{\strip@pt\@tempdima} \else \PassOptionsToPackage{nohelv=true}{newtxtext} \fi \iftx@tt\renewcommand*{\ttdefault}{ntxtt}\fi \ifthenelse{\not\equal{\tx@helvratio}{.94}}% {\PassOptionsToPackage{helvratio=\tx@helvratio}% {newtxtext}}{} \iftx@tt\else% \PassOptionsToPackage{nott=true}{newtxtext}\fi \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{.9}}{} % 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 \@ifpackageloaded{fontspec}{}{% \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