diff options
Diffstat (limited to 'Master/texmf-dist/tex/generic/zhspacing/zhmath.sty')
-rw-r--r-- | Master/texmf-dist/tex/generic/zhspacing/zhmath.sty | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/zhspacing/zhmath.sty b/Master/texmf-dist/tex/generic/zhspacing/zhmath.sty new file mode 100644 index 00000000000..80a090dd84e --- /dev/null +++ b/Master/texmf-dist/tex/generic/zhspacing/zhmath.sty @@ -0,0 +1,169 @@ +% 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 |