% zhmath.sty coded by YIN Dian % Use basic CJK characters in math environment. % Hist: 071202 First coded. % 071204 Set \XeTeXinterchartokenstate=0 to avoid a XeTeX bug. % Added \ProvidesPackage. % 071210 Added another method to set Chinese math fonts in % LaTeX, via option noactive. Improved format detection. % Added ability to set alpha and number fonts. % 071211 Put \setalphanummathfonts in preamble so that % \usecustommathfonts can be used in document in LaTeX. % Changed \hbox to \mbox. Changed default option to % noactive. % 071215 Removed \XeTeXinterchartokenstate=0, as the XeTeX bug % is fixed by JK. Changed \mathcjksizec/d to fit the % main text size. % 071229 Added \XeTeXinterchartokenstate=0 again, because not % everyone has the latest version of XeTeX. Added custom % and nocustom options. % 2016/02/10 Improved \@setzhmathfonts. \catcode`\@=11 \ifx\zhmath@defined\@undefined \def\zhmath@defined{\relax} \def\filedate{2007/12/29} \ifx\zhspacingrevision\@undefined \input zhspacing.sty \fi \def\zhmath@setXeTeXmathcodefam#1#2#3{% % set #1..#2's math family to #3 \count@=#1% \loop \XeTeXmathcode\count@=7 #3 \count@ \unless\ifnum\count@>#2% \advance\count@ by 1 \repeat } \def\zhmath@setactivemathchar#1#2#3#4#5#6{% % set #1..#2 to active math chars, executing \mathchoice #3 #4 #5 #6. \count@=#1% \loop \mathcode\count@="8000 {\catcode\count@=\active\lccode`\~=\count@ \lowercase{\xdef~{{\mathchoice{\noexpand#3{\number\count@}}% {\noexpand#4{\number\count@}}{\noexpand#5{\number\count@}} {\noexpand#6{\number\count@}}}}}% }% \unless\ifnum\count@>#2% \advance\count@ by 1 \repeat } \newif\ifzhmath@active \newif\ifzhmath@custom \ifLaTeX@e % in LaTeX, similar to mathcjk \ProvidesPackage{zhmath}[\filedate] \DeclareOption{active}{\zhmath@activetrue} \DeclareOption{noactive}{\zhmath@activefalse} \DeclareOption{custom}{\zhmath@customtrue} \DeclareOption{nocustom}{\zhmath@customfalse} \zhmath@activefalse \zhmath@customtrue \ProcessOptions\relax \def\mathcjksizea{} \def\mathcjksizeb{} \def\mathcjksizec{\dimen@=\dimexpr\f@size pt*6/10\relax\fontsize{\dimen@}{\dimen@}} \def\mathcjksized{\dimen@=\dimexpr\f@size pt*5/10\relax\fontsize{\dimen@}{\dimen@}} \@ifundefined{zhmathfont}{\newfontfamily\zhmathfont{SimSun}}{} \ifzhmath@active \def\zhmath@zhfont@disp#1{{\mbox{\XeTeXinterchartokenstate=0\zhmathfont\mathcjksizea\char#1\relax}}} \def\zhmath@zhfont@text#1{{\mbox{\XeTeXinterchartokenstate=0\zhmathfont\mathcjksizeb\char#1\relax}}} \def\zhmath@zhfont@scrp#1{{\mbox{\XeTeXinterchartokenstate=0\zhmathfont\mathcjksizec\char#1\relax}}} \def\zhmath@zhfont@subs#1{{\mbox{\XeTeXinterchartokenstate=0\zhmathfont\mathcjksized\char#1\relax}}} \zhmath@setactivemathchar{"2E80}{"9FFF}{\zhmath@zhfont@disp}% {\zhmath@zhfont@text}{\zhmath@zhfont@scrp}{\zhmath@zhfont@subs} \def\setzhmathfont#1{\let\zhmathfont=#1} \else \def\setzhmathfont#1{% \let\zhmathfont=#1% \begingroup \normalfont \zhmathfont \xdef\zhmath@fenc{\f@encoding}% \xdef\zhmath@ffam{\f@family}% \endgroup \DeclareSymbolFont{hanzi}{\zhmath@fenc}{\zhmath@ffam}{m}{n}% } \setzhmathfont\zhmathfont \zhmath@setXeTeXmathcodefam{"2E80}{"9FFF}{\symhanzi} \fi \ifzhmath@custom \def\setalphanummathfonts#1{% \let\zhmathalphanumfont=#1% \begingroup \normalfont \zhmathalphanumfont \xdef\zhmath@@fenc{\f@encoding}% \xdef\zhmath@@ffam{\f@family}% \endgroup \DeclareSymbolFont{@letter}{\zhmath@@fenc}{\zhmath@@ffam}{m}{it}% \DeclareSymbolFont{@number}{\zhmath@@fenc}{\zhmath@@ffam}{m}{n}% \SetSymbolFont{@letter}{bold}{\zhmath@@fenc}{\zhmath@@ffam}{bx}{it}% \SetSymbolFont{@number}{bold}{\zhmath@@fenc}{\zhmath@@ffam}{bx}{n}% } \@ifundefined{zhmathalphanumfont}{\newfontfamily\zhmathalphanumfont{Times New Roman}}{} \setalphanummathfonts\zhmathalphanumfont \def\usecustommathfonts{% \zhmath@setXeTeXmathcodefam{`\0}{`\9}{\sym@number} \zhmath@setXeTeXmathcodefam{`\a}{`\z}{\sym@letter} \zhmath@setXeTeXmathcodefam{`\A}{`\Z}{\sym@letter} } \fi \else %in plain TeX \@ifundefined{zhmathfont}{\font\zhmathfont="SimSun" at 10pt}{} \newfam\zhmath@fam \newfam\zhmath@letterfam \newfam\zhmath@numberfam \begingroup \catcode`\A=12 % \catcode`\P=12 % \catcode`\T=12 % \lowercase{\endgroup \def\@setzhmathfonts#1#2{% \expandafter\@setzhmathfonts@auxi\fontname#1 AT PT\relax#2} \def\@setzhmathfonts@auxi #1 AT #2PT#3\relax#4{% \ifx\relax#2\relax \@setzhmathfonts@auxii#4{#1}{10pt}% \else \@setzhmathfonts@auxii#4{#1}{#2pt}% \fi}% } \def\@setzhmathfonts@auxii#1#2#3{% \font\zhmath@textfont=#2 at #3 \relax \font\zhmath@scriptfont=#2 at .7\dimexpr#3\relax\relax \font\zhmath@scriptscriptfont=#2 at .5\dimexpr#3\relax\relax \textfont#1=\zhmath@textfont \scriptfont#1=\zhmath@scriptfont \scriptscriptfont#1=\zhmath@scriptscriptfont} \def\setzhmathfont#1{\@setzhmathfonts{#1}\zhmath@fam} \setzhmathfont\zhmathfont \def\setalphanummathfonts#1#2{% #1: alpha, #2, num \@setzhmathfonts{#1}\zhmath@letterfam \@setzhmathfonts{#2}\zhmath@numberfam } \zhmath@setXeTeXmathcodefam{"2E80}{"9FFF}{\zhmath@fam} \def\usecustommathfonts{% \@ifundefined{zhmathletterfont}{\font\zhmathletterfont="Times New Roman/I" at 10pt}{} \@ifundefined{zhmathnumberfont}{\font\zhmathnumberfont="Times New Roman" at 10pt}{} \setalphanummathfonts\zhmathletterfont\zhmathnumberfont \zhmath@setXeTeXmathcodefam{`\0}{`\9}{\zhmath@numberfam} \zhmath@setXeTeXmathcodefam{`\a}{`\z}{\zhmath@letterfam} \zhmath@setXeTeXmathcodefam{`\A}{`\Z}{\zhmath@letterfam} } \fi % end if LaTeX \fi