diff options
author | Karl Berry <karl@freefriends.org> | 2009-10-03 14:59:49 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2009-10-03 14:59:49 +0000 |
commit | 7ec4d6d5210183afdb6a9b9564e4eb691e99d18d (patch) | |
tree | 413b77909923cb7433f1aff1698caad8109edd79 /Master/texmf-dist/tex/xelatex/mathspec/mathspec.sty | |
parent | 556ccc6a2633ddbc27a22319d2e16e8a5d7483d1 (diff) |
mathspec 0.2 (30sep09)
git-svn-id: svn://tug.org/texlive/trunk@15603 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/xelatex/mathspec/mathspec.sty')
-rw-r--r-- | Master/texmf-dist/tex/xelatex/mathspec/mathspec.sty | 1549 |
1 files changed, 919 insertions, 630 deletions
diff --git a/Master/texmf-dist/tex/xelatex/mathspec/mathspec.sty b/Master/texmf-dist/tex/xelatex/mathspec/mathspec.sty index 543f0142aa8..6670cbf3249 100644 --- a/Master/texmf-dist/tex/xelatex/mathspec/mathspec.sty +++ b/Master/texmf-dist/tex/xelatex/mathspec/mathspec.sty @@ -1,67 +1,87 @@ -%% -%% This is file `mathspec.sty', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% mathspec.dtx (with options: `package') -%% -%% This is a generated file. -%% -%% © Andrew Gilbert Moschou -%% -%% This file may be distributed and/or modified under the -%% conditions of the LaTeX Project Public License, either -%% version 1.3c of this license or (at your option) any later -%% version. The latest version of this license is in: -%% -%% http://www.latex-project.org/lppl.txt -%% -%% and version 1.3c or later is part of all recent distributions of -%% LaTeX. -%% \NeedsTeXFormat{LaTeX2e}[2005/12/01] -\ProvidesPackage{mathspec}[2009/08/29 v0.16 LaTeX Package (Mathematics font selection for XeLaTeX)] -\let\eu@ifnot@normalskips\@firstofone -\let\eu@if@MnSymbol\@gobble +\ProvidesPackage{mathspec} + [2009/09/30 v0.2 LaTeX Package (Mathematics font selection for XeLaTeX)] + +%% Require etoolbox for convenience and amstext for well sized text in maths +%% mode. ifxetex is obvious. +\RequirePackage{etoolbox} +\RequirePackage{amstext} +\RequirePackage{ifxetex} + +%% Require a recent XeTeX version. +\RequireXeTeX +\ifcsundef{XeTeXglyphbounds} + {\PackageError{mathspec} + {mathspec requires a more recent version of XeTeX} + {Your current vesion of XeTeX is \the\XeTeXversion\XeTeXrevision.\MessageBreak + Update your version of XeTeX to at least 0.9995.}} + {\relax} + +%% Booleans are created automatically on demand. +\newcommand\eu@booltrue[1]{\providebool{#1}\booltrue{#1}} +\newcommand\eu@gbooltrue[1]{\providebool{#1}\global\booltrue{#1}} +\newcommand\eu@boolfalse[1]{\providebool{#1}\boolfalse{#1}} +\newcommand\eu@ifbool[1]{\providebool{#1}\ifbool{#1}} + +%% Some extras: +%% \eu@ifbooltrue{<bool>}{<true>} +%% \eu@ifboolfalse{<bool>}{<false>} +%% \eu@ifsomebooltrue{<bool_1>,...,<bool_n>}{<true>} +%% (if <bool_i> is true for some i) +%% \eu@ifnumis{x}{x_1,...,x_n}{<true>}{<false>} (if x = x_i for some i) +%% \eu@ifnumin{x}{a,b}{<true>}{<false>} (if a ≤ x ≤ b) +\newcommand\eu@ifbooltrue[2]{\eu@ifbool{#1}{#2}{\relax}} +\newcommand\eu@ifboolfalse[2]{\eu@ifbool{#1}{\relax}{#2}} +\newcommand\eu@ifsomebooltrue[1]{% + \eu@boolfalse{temp}% + \def\do##1{\eu@ifbooltrue{##1}{\eu@booltrue{temp}}}% + \docsvlist{#1}% + \eu@ifbooltrue{temp}} +\newcommand\eu@ifnumis[2]{% + \providebool{temp}% + \boolfalse{temp}% + \def\do##1{\ifnumcomp{#1}{=}{##1}{\booltrue{temp}}{\relax}}% + \docsvlist{#2}% + \ifbool{temp}} +\newcommand\eu@ifnumin[2]{\@eu@ifnumin{#1}#2\@nil} +\def\@eu@ifnumin #1#2,#3\@nil{% + \providebool{temp}% + \booltrue{temp}% + \ifnumcomp{#1}{<}{#2}{\boolfalse{temp}}{\relax}% + \ifnumcomp{#3}{<}{#1}{\boolfalse{temp}}{\relax}% + \ifbool{temp}} + +%% Options. +\DeclareOption{normalskips} + {\PackageWarning{mathspec} + {Package option `normalskips' is deprecated}} \def\eu@zf@math{no-math} -\DeclareOption{normalskips}{\let\eu@ifnot@normalskips\@gobble} -\DeclareOption{no-math}{\relax} -\DeclareOption{MnSymbol}{\let\eu@if@MnSymbol\@firstofone} \DeclareOption{math}{\def\eu@zf@math{math}} +\DeclareOption{no-math}{\relax} +\DeclareOption{MnSymbol}{\eu@booltrue{MnSymbol}} \DeclareOption*{\PassOptionsToPackage{\CurrentOption}{fontspec}} \ProcessOptions\relax + +%% Requires packages: +%% fontspec, xkeyval, mathstyle, etoolbox and maybe MnSymbol \RequirePackage[\eu@zf@math]{fontspec}[2008/08/09] -\eu@if@MnSymbol{\RequirePackage{MnSymbol}} \RequirePackage{xkeyval} -\RequirePackage{xifthen} -\newif\if@eu@LatinUppercase@ -\newif\if@eu@LatinLowercase@ -\newif\if@eu@LatinDigits@ -\newif\if@eu@GreekUppercase@ -\newif\if@eu@GreekLowercase@ -\newif\if@eu@GreekDigits@ -\newif\if@eu@Symbols@ -\newif\if@eu@Digits@ -\let\eu@if@varforms\@gobble -\let\eu@ifset@mathrm\@gobble -\let\eu@ifset@mathcal\@gobble -\let\eu@ifset@mathsf\@gobble -\let\eu@ifset@mathtt\@gobble -\let\eu@ifset@mathfrak\@gobble -\let\eu@ifset@mathbb\@gobble -\eu@ifnot@normalskips{ - \thinmuskip=4mu - \medmuskip=5mu plus 2mu minus 4mu - \thickmuskip=6mu plus 5mu} -\newcommand\eu@isloaded[2][]{ - \expandafter\ifx\csname if@eu@#2loaded@\endcsname\relax - \expandafter\newif\csname if@eu@#2loaded@\endcsname - \fi - \@ifpackageloaded{#2} - {\csname @eu@#2loaded@true\endcsname #1} - {\csname @eu@#2loaded@false\endcsname}} -\eu@isloaded{amsmath} +\eu@ifbooltrue{MnSymbol}{\RequirePackage{MnSymbol}} + +\providecommand\currentmathstyle{\relax} + +%% Check whether a package is loaded. +%% \eu@package@loaded{<package>} +\newcommand\eu@package@loaded[1]{ + \@ifpackageloaded{#1} + {\eu@booltrue{eu@#1@loaded}} + {\eu@boolfalse{eu@#1@loaded}}} +%% Test for amsmath. Do I need to do this here or at all? +\eu@package@loaded{amsmath} + +%% Define the undefined Greek letters. Include all variant forms (same as normal +%% forms if variant forms are unavailable). Latin F for digamma is better than +%% nothing. If Digamma is available, then Capital and Lowercase the are same. \DeclareMathSymbol{\Alpha}{\mathalpha}{operators}{"41} \DeclareMathSymbol{\Beta}{\mathalpha}{operators}{"42} \DeclareMathSymbol{\Epsilon}{\mathalpha}{operators}{"45} @@ -77,88 +97,81 @@ \DeclareMathSymbol{\Chi}{\mathalpha}{operators}{"58} \DeclareMathSymbol{\omicron}{\mathord}{letters}{"6F} \let\varbeta\beta -\@ifundefined{varkappa} +\ifdef{\varkappa} + {\relax} {\let\varkappa\kappa} +\ifdef{\varTheta} + {\let\eu@cm@varTheta\varTheta} {\relax} \let\varTheta\Theta -\@ifundefined{digamma} - {\DeclareMathSymbol{\Digamma}{\mathalpha}{operators}{"46} - \DeclareMathSymbol{\digamma}{\mathord}{operators}{"46}} +\ifdef{\digamma} {\let\Digamma\digamma} -\let\cmAlpha\Alpha -\let\cmBeta\Beta -\let\cmGamma\Gamma -\let\cmDelta\Delta -\let\cmEpsilon\Epsilon -\let\cmZeta\Zeta -\let\cmEta\Eta -\let\cmTheta\Theta -\let\cmIota\Iota -\let\cmKappa\Kappa -\let\cmLambda\Lambda -\let\cmMu\Mu -\let\cmNu\Nu -\let\cmXi\Xi -\let\cmOmicron\Omicron -\let\cmPi\Pi -\let\cmRho\Rho -\let\cmSigma\Sigma -\let\cmTau\Tau -\let\cmUpsilon\Upsilon -\let\cmPhi\Phi -\let\cmChi\Chi -\let\cmPsi\Psi -\let\cmOmega\Omega -\let\cmDigamma\Digamma -\let\cmalpha\alpha -\let\cmbeta\beta -\let\cmgamma\gamma -\let\cmdelta\delta -\let\cmepsilon\epsilon -\let\cmzeta\zeta -\let\cmeta\eta -\let\cmtheta\theta -\let\cmiota\iota -\let\cmkappa\kappa -\let\cmlambda\lambda -\let\cmmu\mu -\let\cmnu\nu -\let\cmxi\xi -\let\cmomicron\omicron -\let\cmpi\pi -\let\cmrho\rho -\let\cmvarsigma\varsigma -\let\cmsigma\sigma -\let\cmtau\tau -\let\cmupsilon\upsilon -\let\cmphi\phi -\let\cmchi\chi -\let\cmpsi\psi -\let\cmomega\omega -\let\cmdigamma\digamma -\let\cmvarbeta\varbeta -\let\cmvarepsilon\varepsilon -\let\cmvartheta\vartheta -\let\cmvarkappa\varkappa -\let\cmvarpi\varpi -\let\cmvarrho\varrho -\let\cmvarphi\varphi -\let\cmvarTheta\varTheta -\RequirePackage{etoolbox} -\@gobble{\providecommand\expandonce[1]{\unexpanded\expandafter{#1}}} + {\DeclareMathSymbol{\Digamma}{\mathalpha}{operators}{"46} + \DeclareMathSymbol{\digamma}{\mathord}{letters}{"46}} + +%% Preserve old definitions of all Greek letters. \eu@cm@alpha etc. +\def\do#1{\csletcs{eu@cm@#1}{#1}} +\docsvlist{ + Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Iota,Kappa,Lambda,Mu,Nu, + Xi,Omicron,Pi,Rho,Sigma,Tau,Upsilon,Phi,Chi,Psi,Omega,Digamma,alpha, + beta,gamma,delta,epsilon,zeta,eta,theta,iota,kappa,lambda,mu,nu,xi, + omicron,pi,rho,varsigma,sigma,tau,upsilon,phi,chi,psi,omega,digamma, + varTheta,varbeta,varepsilon,vartheta,varkappa,varpi,varrho,varphi} +%% varTheta is done separately because amsmath defines it differently. + +%% Can define/redefine any command using the syntax of +%% \newcommand/\renewcommand without error. Some helpers. +\newcommand\ernewcommand[1]{\ifdef{#1}{\renewcommand{#1}}{\newcommand{#1}}} \providecommand\expanded[1]{\edef\@tempa{#1}\@tempa} -\providecommand\ernewcommand[1]{ - \@ifundefined{\expandafter\@gobble\string#1}% - {\let\er@newcommand\newcommand}% - {\let\er@newcommand\renewcommand - \PackageWarning{mathspec}{Redefining command `\string#1'}}% - \er@newcommand#1} \newcommand\eu@setkeys[3][]{ - \ifthenelse{\isempty{#1}} - {\relax} - {\presetkeys[eu]{#2}{#1}{}} - \expanded{\noexpand\setkeys*[eu]{#2}{\expandonce#3}}} -\newcommand\eu@fontspec[2]{\expanded{\noexpand\zf@fontspec{\expandonce#1}{\expandonce#2}}} + \ifblank{#1}{\relax}{\presetkeys[eu]{#2}{#1}{}} + \expanded{\noexpand\setkeys*[eu]{#2}{\expandonce#3\@empty}}} +\newcommand\eu@fontspec[2]{ + \expanded{\noexpand\zf@fontspec{\expandonce#1\@empty}{\expandonce#2\@empty}}} + +%% Deprecated commands. +%% \+: Use \"..." or " instead. +%% \plaindigits: Digits are no longer selected automatically from either +%% the Latin or the Greek mathematics font. Instead, they +%% must explicitely be stated. If you want plain digits, just +%% don't say you want digits. +%5 \normalvarforms: Now called \normalisevarforms +%% \varforms: Now called \exchangeforms +%% Eventually, documents that use these will compile with error. +\newcommand\+{ + \PackageWarning{mathspec} + {\protect\+\space is deprecated, recommend to use\MessageBreak\protect\"..." + or "} + \eu@plus} +\newcommand\setsansfonts{ + \PackageWarning{mathspec} + {\protect\setsansfonts\space is deprecated, recommend to use \protect + \setallsansfonts.} + \setallsansfonts} +\@onlypreamble\setsansfonts +\newcommand\setmonofonts{ + \PackageWarning{mathspec} + {\protect\setmonofonts\space is deprecated, recommend to use \protect + \setallmonofonts.} + \setallsansfonts} +\@onlypreamble\setmonofonts +\newcommand\plaindigits{ + \PackageWarning{mathspec}{\protect\plaindigits\space is deprecated}} +\@onlypreamble\plaindigits +\newcommand\normalvarforms{ + \PackageWarning{mathspec} + {\protect\normalvarforms\space is deprecated, recommend to use + \protect\normalisevarforms\space or \protect\normalizevarforms} + \normalisevarforms} +\@onlypreamble\normalvarforms +\newcommand\varforms{ + \PackageWarning{mathspec} + {\protect\varforms\space is deprecated, recommend to use + \protect\exchangeforms} + \exchangeforms} +\@onlypreamble\varforms + +%% I don't want this clogging up my sty file. It will be gone eventually. \def\@ifnext#1#2#3{% \let\@tempd=#1% \def\@tempa{#2}% @@ -188,525 +201,801 @@ \def\eu@new@command#1{\eu@@testopt{\eu@@newcommand#1}0} \def\eu@@newcommand#1[#2]{\@ifnext[{\@xargdef#1[#2]}{\@argdef#1[#2]}} \long\def\eu@@testopt#1#2{\@ifnext[{#1}{#1[{#2}]}} -\newcommand\normalvarforms[1][]{\AtBeginDocument{ - \ifx\varbeta\cmvarbeta - \let\varbeta\beta - \fi - \ifx\varepsilon\cmvarepsilon - \let\varepsilon\epsilon - \fi - \ifx\vartheta\cmvartheta - \let\vartheta\theta +\eu@DeclareRobustCommand\eu@plus[1][]{} + +%% The main user command (comes in two spellings) +%% \setmathsfont(<sets>)[<shapes, font features>]{<font name>} +%% \setmathfont(<sets>)[<shapes, font features>]{<font name>} +%% +%% <set> is a CSV list of any of: Special, Latin, Greek, Digits, Symbols. If +%% (<set>) is omitted, then (Special) is assumed. Special is provided to +%% hook to some external code (e.g. potentially unicode-math). That is, +%% for mathspec purposes, (<sets>) is mandatory. Omit it so that it +%% behaves like a different command. See below. +%% <shapes> is the keyval list of font shapes for the subset of <set>. +%% Valid keys are: Uppercase, Lowercase, Arabic. +%% Valid values are: Regular, Italic, Plain. +%% <font features>, <font name> follow directly from fontspec. +\providecommand\setmathsfont{\eu@setmathsfont} +\let\setmathfont\setmathsfont +\newcommand\eu@setmathsfont{ + \@ifnextchar( + {\@eu@setmathsfont} + {\@eu@setmathsfont(Special)}} +\def\@eu@setmathsfont(#1){ + \edef\eu@setmathsfont@Set{#1} + \@@eu@setmathsfont} +\newcommand\@@eu@setmathsfont[2][]{ + \@for\i@for:=\eu@setmathsfont@Set\do + {\csname eu@ScopeSet@\i@for\endcsname[#1]{#2}}} + +%% The FIRST branch \setmathsfont(Special) +%% Predefine this command before mathspec is loaded (or redefine it) to get +%% +%% \setmathsfont[<font features>]{<font name>} +%% +%% to do something else. +%% +%% Essentially, \setmathsfont(<sets>)[<font features>]{<font name>} is a mathspec +%% command, but \setmathsfont[<font features>]{<font name>} is an external +%% command. +\providecommand\eu@ScopeSet@Special[2][]{\relax} + +%% The SECOND branch \setmathsfont(Digits) +\newcommand\eu@ScopeSet@Digits[2][]{ + \eu@setkeys[Arabic=Regular]{Digits}{#1} + \eu@fontspec{\XKV@rm}{#2} + \ifcase\eu@DigitsArabic@@value %% If Digits Regular + \ernewcommand\eu@DigitsArabic@symfont{Digits:m:n} + \let\eu@Digitsmathsfont\zf@family + \eu@booltrue{Digits} + \or %% If Digits Italic + \ernewcommand\eu@DigitsArabic@symfont{Digits:m:it} + \let\eu@Digitsmathsfont\zf@family + \eu@booltrue{Digits} + \or %% If Digits Plain + \eu@boolfalse{Digits} \fi - \ifx\varkappa\cmvarkappa - \let\varkappa\kappa + \eu@ifsomebooltrue{Digits} + {\DeclareSymbolFont{Digits:m:n}{EU1}{\eu@Digitsmathsfont}{m}{n}} + \eu@ifbooltrue{Digits} + {\fontfamily\eu@Digitsmathsfont\selectfont + \DeclareMathSymbol{0}{\mathord}{\eu@DigitsArabic@symfont}{`0} + \DeclareMathSymbol{1}{\mathord}{\eu@DigitsArabic@symfont}{`1} + \DeclareMathSymbol{2}{\mathord}{\eu@DigitsArabic@symfont}{`2} + \DeclareMathSymbol{3}{\mathord}{\eu@DigitsArabic@symfont}{`3} + \DeclareMathSymbol{4}{\mathord}{\eu@DigitsArabic@symfont}{`4} + \DeclareMathSymbol{5}{\mathord}{\eu@DigitsArabic@symfont}{`5} + \DeclareMathSymbol{6}{\mathord}{\eu@DigitsArabic@symfont}{`6} + \DeclareMathSymbol{7}{\mathord}{\eu@DigitsArabic@symfont}{`7} + \DeclareMathSymbol{8}{\mathord}{\eu@DigitsArabic@symfont}{`8} + \DeclareMathSymbol{9}{\mathord}{\eu@DigitsArabic@symfont}{`9}}} + +%% The THIRD branch \setmathsfont(Latin) +\newcommand\eu@ScopeSet@Latin[2][]{ + \eu@setkeys[Uppercase=Italic,Lowercase=Italic]{Latin}{#1} + \eu@fontspec{\XKV@rm}{#2} + \ifcase\eu@LatinUppercase@@value %% If Latin Uppercase Regular + \ernewcommand\eu@LatinUppercase@symfont{Latin:m:n} + \let\eu@Latinmathsfont\zf@family + \eu@booltrue{LatinUppercase} + \or %% If Latin Uppercase Italic + \ernewcommand\eu@LatinUppercase@symfont{Latin:m:it} + \let\eu@Latinmathsfont\zf@family + \eu@booltrue{LatinUppercase} + \or %% If Latin Uppercase Plain + \eu@boolfalse{LatinUppercase} \fi - \ifx\varpi\cmvarpi - \let\varpi\pi + \ifcase\eu@LatinLowercase@@value %% If Latin Lowercase Regular + \ernewcommand\eu@LatinLowercase@symfont{Latin:m:n} + \let\eu@Latinmathsfont\zf@family + \eu@booltrue{LatinLowercase} + \or %% If Latin Lowercase Italic + \ernewcommand\eu@LatinLowercase@symfont{Latin:m:it} + \let\eu@Latinmathsfont\zf@family + \eu@booltrue{LatinLowercase} + \or %% If Latin Lowercase Plain + \eu@boolfalse{LatinLowercase} \fi - \ifx\varrho\cmvarrho - \let\varrho\rho + \eu@ifsomebooltrue{LatinUppercase,LatinLowercase} + {\DeclareSymbolFont{Latin:m:n}{EU1}{\eu@Latinmathsfont}{m}{n} + \DeclareSymbolFont{Latin:m:it}{EU1}{\eu@Latinmathsfont}{m}{it}} + \eu@ifbooltrue{LatinUppercase} + {\fontfamily\eu@Latinmathsfont\selectfont + \DeclareMathSymbol{A}{\mathalpha}{\eu@LatinUppercase@symfont}{`A} + \DeclareMathSymbol{B}{\mathalpha}{\eu@LatinUppercase@symfont}{`B} + \DeclareMathSymbol{C}{\mathalpha}{\eu@LatinUppercase@symfont}{`C} + \DeclareMathSymbol{D}{\mathalpha}{\eu@LatinUppercase@symfont}{`D} + \DeclareMathSymbol{E}{\mathalpha}{\eu@LatinUppercase@symfont}{`E} + \DeclareMathSymbol{F}{\mathalpha}{\eu@LatinUppercase@symfont}{`F} + \DeclareMathSymbol{G}{\mathalpha}{\eu@LatinUppercase@symfont}{`G} + \DeclareMathSymbol{H}{\mathalpha}{\eu@LatinUppercase@symfont}{`H} + \DeclareMathSymbol{I}{\mathalpha}{\eu@LatinUppercase@symfont}{`I} + \DeclareMathSymbol{J}{\mathalpha}{\eu@LatinUppercase@symfont}{`J} + \DeclareMathSymbol{K}{\mathalpha}{\eu@LatinUppercase@symfont}{`K} + \DeclareMathSymbol{L}{\mathalpha}{\eu@LatinUppercase@symfont}{`L} + \DeclareMathSymbol{M}{\mathalpha}{\eu@LatinUppercase@symfont}{`M} + \DeclareMathSymbol{N}{\mathalpha}{\eu@LatinUppercase@symfont}{`N} + \DeclareMathSymbol{O}{\mathalpha}{\eu@LatinUppercase@symfont}{`O} + \DeclareMathSymbol{P}{\mathalpha}{\eu@LatinUppercase@symfont}{`P} + \DeclareMathSymbol{Q}{\mathalpha}{\eu@LatinUppercase@symfont}{`Q} + \DeclareMathSymbol{R}{\mathalpha}{\eu@LatinUppercase@symfont}{`R} + \DeclareMathSymbol{S}{\mathalpha}{\eu@LatinUppercase@symfont}{`S} + \DeclareMathSymbol{T}{\mathalpha}{\eu@LatinUppercase@symfont}{`T} + \DeclareMathSymbol{U}{\mathalpha}{\eu@LatinUppercase@symfont}{`U} + \DeclareMathSymbol{V}{\mathalpha}{\eu@LatinUppercase@symfont}{`V} + \DeclareMathSymbol{W}{\mathalpha}{\eu@LatinUppercase@symfont}{`W} + \DeclareMathSymbol{X}{\mathalpha}{\eu@LatinUppercase@symfont}{`X} + \DeclareMathSymbol{Y}{\mathalpha}{\eu@LatinUppercase@symfont}{`Y} + \DeclareMathSymbol{Z}{\mathalpha}{\eu@LatinUppercase@symfont}{`Z}} + \eu@ifbooltrue{LatinLowercase} + {\fontfamily\eu@Latinmathsfont\selectfont + \DeclareMathSymbol{a}{\mathalpha}{\eu@LatinLowercase@symfont}{`a} + \DeclareMathSymbol{b}{\mathalpha}{\eu@LatinLowercase@symfont}{`b} + \DeclareMathSymbol{c}{\mathalpha}{\eu@LatinLowercase@symfont}{`c} + \DeclareMathSymbol{d}{\mathalpha}{\eu@LatinLowercase@symfont}{`d} + \DeclareMathSymbol{e}{\mathalpha}{\eu@LatinLowercase@symfont}{`e} + \DeclareMathSymbol{f}{\mathalpha}{\eu@LatinLowercase@symfont}{`f} + \DeclareMathSymbol{g}{\mathalpha}{\eu@LatinLowercase@symfont}{`g} + \DeclareMathSymbol{h}{\mathalpha}{\eu@LatinLowercase@symfont}{`h} + \DeclareMathSymbol{i}{\mathalpha}{\eu@LatinLowercase@symfont}{`i} + \DeclareMathSymbol{j}{\mathalpha}{\eu@LatinLowercase@symfont}{`j} + \DeclareMathSymbol{k}{\mathalpha}{\eu@LatinLowercase@symfont}{`k} + \DeclareMathSymbol{l}{\mathalpha}{\eu@LatinLowercase@symfont}{`l} + \DeclareMathSymbol{m}{\mathalpha}{\eu@LatinLowercase@symfont}{`m} + \DeclareMathSymbol{n}{\mathalpha}{\eu@LatinLowercase@symfont}{`n} + \DeclareMathSymbol{o}{\mathalpha}{\eu@LatinLowercase@symfont}{`o} + \DeclareMathSymbol{p}{\mathalpha}{\eu@LatinLowercase@symfont}{`p} + \DeclareMathSymbol{q}{\mathalpha}{\eu@LatinLowercase@symfont}{`q} + \DeclareMathSymbol{r}{\mathalpha}{\eu@LatinLowercase@symfont}{`r} + \DeclareMathSymbol{s}{\mathalpha}{\eu@LatinLowercase@symfont}{`s} + \DeclareMathSymbol{t}{\mathalpha}{\eu@LatinLowercase@symfont}{`t} + \DeclareMathSymbol{u}{\mathalpha}{\eu@LatinLowercase@symfont}{`u} + \DeclareMathSymbol{v}{\mathalpha}{\eu@LatinLowercase@symfont}{`v} + \DeclareMathSymbol{w}{\mathalpha}{\eu@LatinLowercase@symfont}{`w} + \DeclareMathSymbol{x}{\mathalpha}{\eu@LatinLowercase@symfont}{`x} + \DeclareMathSymbol{y}{\mathalpha}{\eu@LatinLowercase@symfont}{`y} + \DeclareMathSymbol{z}{\mathalpha}{\eu@LatinLowercase@symfont}{`z}}} + +%% The FOURTH branch \setmathsfont(Greek) +\newcommand\eu@ScopeSet@Greek[2][]{ + \eu@setkeys[Uppercase=Regular,Lowercase=Italic]{Greek}{#1} + \eu@fontspec{\XKV@rm}{#2} + \ifcase\eu@GreekUppercase@@value %% If Greek Uppercase Regular + \ernewcommand\eu@GreekUppercase@symfont{Greek:m:n} + \let\eu@Greekmathsfont\zf@family + \eu@booltrue{GreekUppercase} + \or %% If Greek Uppercase Italic + \ernewcommand\eu@GreekUppercase@symfont{Greek:m:it} + \let\eu@Greekmathsfont\zf@family + \eu@booltrue{GreekUppercase} + \or %% If Greek Uppercase Plain + \eu@boolfalse{GreekUppercase} \fi - \ifx\varphi\cmvarphi - \let\varphi\phi + \ifcase\eu@GreekLowercase@@value %% If Greek Lowercase Regular + \ernewcommand\eu@GreekLowercase@symfont{Greek:m:n} + \let\eu@Greekmathsfont\zf@family + \eu@booltrue{GreekLowercase} + \or %% If Greek Lowercase Italic + \ernewcommand\eu@GreekLowercase@symfont{Greek:m:it} + \let\eu@Greekmathsfont\zf@family + \eu@booltrue{GreekLowercase} + \or %% If Greek Lowercase Plain + \eu@boolfalse{GreekLowercase} \fi - \ifx\varTheta\cmvarTheta - \let\varTheta\Theta - \fi}} -\let\eu@ifnot@plaindigits\@firstofone -\newcommand\plaindigits{\let\eu@ifnot@plaindigits\@gobble} -\providecommand\setmathsfont{\eu@setmathsfont} -\let\setmathfont\setmathsfont -\eu@DeclareRobustCommand\+[1][1]{\ensuremath{\mskip#1mu}} -\newcommand\varforms[1]{\def\eu@if@varforms##1{##1{#1}}} + \eu@ifsomebooltrue{GreekUppercase,GreekLowercase} + {\DeclareSymbolFont{Greek:m:n}{EU1}{\eu@Greekmathsfont}{m}{n} + \DeclareSymbolFont{Greek:m:it}{EU1}{\eu@Greekmathsfont}{m}{it}} + \eu@ifbooltrue{GreekUppercase} + {\fontfamily\eu@Greekmathsfont\selectfont + \XeTeXDeclareMathSymbol{Α}{\mathalpha}{\eu@GreekUppercase@symfont}{`Α}[\Alpha] + \XeTeXDeclareMathSymbol{Β}{\mathalpha}{\eu@GreekUppercase@symfont}{`Β}[\Beta] + \XeTeXDeclareMathSymbol{Γ}{\mathalpha}{\eu@GreekUppercase@symfont}{`Γ}[\Gamma] + \XeTeXDeclareMathSymbol{Δ}{\mathalpha}{\eu@GreekUppercase@symfont}{`Δ}[\Delta] + \XeTeXDeclareMathSymbol{Ε}{\mathalpha}{\eu@GreekUppercase@symfont}{`Ε}[\Epsilon] + \XeTeXDeclareMathSymbol{Ζ}{\mathalpha}{\eu@GreekUppercase@symfont}{`Ζ}[\Zeta] + \XeTeXDeclareMathSymbol{Η}{\mathalpha}{\eu@GreekUppercase@symfont}{`Η}[\Eta] + \XeTeXDeclareMathSymbol{Θ}{\mathalpha}{\eu@GreekUppercase@symfont}{`Θ}[\Theta] + \XeTeXDeclareMathSymbol{Ι}{\mathalpha}{\eu@GreekUppercase@symfont}{`Ι}[\Iota] + \XeTeXDeclareMathSymbol{Κ}{\mathalpha}{\eu@GreekUppercase@symfont}{`Κ}[\Kappa] + \XeTeXDeclareMathSymbol{Λ}{\mathalpha}{\eu@GreekUppercase@symfont}{`Λ}[\Lambda] + \XeTeXDeclareMathSymbol{Μ}{\mathalpha}{\eu@GreekUppercase@symfont}{`Μ}[\Mu] + \XeTeXDeclareMathSymbol{Ν}{\mathalpha}{\eu@GreekUppercase@symfont}{`Ν}[\Nu] + \XeTeXDeclareMathSymbol{Ξ}{\mathalpha}{\eu@GreekUppercase@symfont}{`Ξ}[\Xi] + \XeTeXDeclareMathSymbol{Ο}{\mathalpha}{\eu@GreekUppercase@symfont}{`Ο}[\Omicron] + \XeTeXDeclareMathSymbol{Π}{\mathalpha}{\eu@GreekUppercase@symfont}{`Π}[\Pi] + \XeTeXDeclareMathSymbol{Ρ}{\mathalpha}{\eu@GreekUppercase@symfont}{`Ρ}[\Rho] + \XeTeXDeclareMathSymbol{Σ}{\mathalpha}{\eu@GreekUppercase@symfont}{`Σ}[\Sigma] + \XeTeXDeclareMathSymbol{Τ}{\mathalpha}{\eu@GreekUppercase@symfont}{`Τ}[\Tau] + \XeTeXDeclareMathSymbol{Υ}{\mathalpha}{\eu@GreekUppercase@symfont}{`Υ}[\Upsilon] + \XeTeXDeclareMathSymbol{Φ}{\mathalpha}{\eu@GreekUppercase@symfont}{`Φ}[\Phi] + \XeTeXDeclareMathSymbol{Χ}{\mathalpha}{\eu@GreekUppercase@symfont}{`Χ}[\Chi] + \XeTeXDeclareMathSymbol{Ψ}{\mathalpha}{\eu@GreekUppercase@symfont}{`Ψ}[\Psi] + \XeTeXDeclareMathSymbol{Ω}{\mathalpha}{\eu@GreekUppercase@symfont}{`Ω}[\Omega] + \XeTeXDeclareMathSymbol{Ϝ}{\mathalpha}{\eu@GreekUppercase@symfont}{`Ϝ}[\Digamma] + \XeTeXDeclareMathSymbol{ϴ}{\mathalpha}{\eu@GreekUppercase@symfont}{`ϴ}[\varTheta] + \eu@fixgreekcs{Α}{Alpha} + \eu@fixgreekcs{Β}{Beta} + \eu@fixgreekcs{Γ}{Gamma} + \eu@fixgreekcs{Δ}{Delta} + \eu@fixgreekcs{Ε}{Epsilon} + \eu@fixgreekcs{Ζ}{Zeta} + \eu@fixgreekcs{Η}{Eta} + \eu@fixgreekcs{Θ}{Theta} + \eu@fixgreekcs{Ι}{Iota} + \eu@fixgreekcs{Κ}{Kappa} + \eu@fixgreekcs{Λ}{Lambda} + \eu@fixgreekcs{Μ}{Mu} + \eu@fixgreekcs{Ν}{Nu} + \eu@fixgreekcs{Ξ}{Xi} + \eu@fixgreekcs{Ο}{Omicron} + \eu@fixgreekcs{Π}{Pi} + \eu@fixgreekcs{Ρ}{Rho} + \eu@fixgreekcs{Σ}{Sigma} + \eu@fixgreekcs{Τ}{Tau} + \eu@fixgreekcs{Υ}{Upsilon} + \eu@fixgreekcs{Φ}{Phi} + \eu@fixgreekcs{Χ}{Chi} + \eu@fixgreekcs{Ψ}{Psi} + \eu@fixgreekcs{Ω}{Omega} + \eu@fixgreekcs{Ϝ}{Digamma} + \eu@fixgreekcs{ϴ}{varTheta}} + \eu@ifbooltrue{GreekLowercase} + {\fontfamily\eu@Greekmathsfont\selectfont + \XeTeXDeclareMathSymbol{α}{\mathalpha}{\eu@GreekLowercase@symfont}{`α}[\alpha] + \XeTeXDeclareMathSymbol{β}{\mathalpha}{\eu@GreekLowercase@symfont}{`β}[\beta] + \XeTeXDeclareMathSymbol{γ}{\mathalpha}{\eu@GreekLowercase@symfont}{`γ}[\gamma] + \XeTeXDeclareMathSymbol{δ}{\mathalpha}{\eu@GreekLowercase@symfont}{`δ}[\delta] + \XeTeXDeclareMathSymbol{ε}{\mathalpha}{\eu@GreekLowercase@symfont}{`ε}[\epsilon] + \XeTeXDeclareMathSymbol{ζ}{\mathalpha}{\eu@GreekLowercase@symfont}{`ζ}[\zeta] + \XeTeXDeclareMathSymbol{η}{\mathalpha}{\eu@GreekLowercase@symfont}{`η}[\eta] + \XeTeXDeclareMathSymbol{θ}{\mathalpha}{\eu@GreekLowercase@symfont}{`θ}[\theta] + \XeTeXDeclareMathSymbol{ι}{\mathalpha}{\eu@GreekLowercase@symfont}{`ι}[\iota] + \XeTeXDeclareMathSymbol{κ}{\mathalpha}{\eu@GreekLowercase@symfont}{`κ}[\kappa] + \XeTeXDeclareMathSymbol{λ}{\mathalpha}{\eu@GreekLowercase@symfont}{`λ}[\lambda] + \XeTeXDeclareMathSymbol{μ}{\mathalpha}{\eu@GreekLowercase@symfont}{`μ}[\mu] + \XeTeXDeclareMathSymbol{ν}{\mathalpha}{\eu@GreekLowercase@symfont}{`ν}[\nu] + \XeTeXDeclareMathSymbol{ξ}{\mathalpha}{\eu@GreekLowercase@symfont}{`ξ}[\xi] + \XeTeXDeclareMathSymbol{ο}{\mathalpha}{\eu@GreekLowercase@symfont}{`ο}[\omicron] + \XeTeXDeclareMathSymbol{π}{\mathalpha}{\eu@GreekLowercase@symfont}{`π}[\pi] + \XeTeXDeclareMathSymbol{ρ}{\mathalpha}{\eu@GreekLowercase@symfont}{`ρ}[\rho] + \XeTeXDeclareMathSymbol{ς}{\mathalpha}{\eu@GreekLowercase@symfont}{`ς}[\varsigma] + \XeTeXDeclareMathSymbol{σ}{\mathalpha}{\eu@GreekLowercase@symfont}{`σ}[\sigma] + \XeTeXDeclareMathSymbol{τ}{\mathalpha}{\eu@GreekLowercase@symfont}{`τ}[\tau] + \XeTeXDeclareMathSymbol{υ}{\mathalpha}{\eu@GreekLowercase@symfont}{`υ}[\upsilon] + \XeTeXDeclareMathSymbol{φ}{\mathalpha}{\eu@GreekLowercase@symfont}{`φ}[\phi] + \XeTeXDeclareMathSymbol{χ}{\mathalpha}{\eu@GreekLowercase@symfont}{`χ}[\chi] + \XeTeXDeclareMathSymbol{ψ}{\mathalpha}{\eu@GreekLowercase@symfont}{`ψ}[\psi] + \XeTeXDeclareMathSymbol{ω}{\mathalpha}{\eu@GreekLowercase@symfont}{`ω}[\omega] + \XeTeXDeclareMathSymbol{ϝ}{\mathalpha}{\eu@GreekLowercase@symfont}{`ϝ}[\digamma] + \XeTeXDeclareMathSymbol{ϐ}{\mathalpha}{\eu@GreekLowercase@symfont}{`ϐ}[\varbeta] + \XeTeXDeclareMathSymbol{ϵ}{\mathalpha}{\eu@GreekLowercase@symfont}{`ϵ}[\varepsilon] + \XeTeXDeclareMathSymbol{ϑ}{\mathalpha}{\eu@GreekLowercase@symfont}{`ϑ}[\vartheta] + \XeTeXDeclareMathSymbol{ϰ}{\mathalpha}{\eu@GreekLowercase@symfont}{`ϰ}[\varkappa] + \XeTeXDeclareMathSymbol{ϖ}{\mathalpha}{\eu@GreekLowercase@symfont}{`ϖ}[\varpi] + \XeTeXDeclareMathSymbol{ϱ}{\mathalpha}{\eu@GreekLowercase@symfont}{`ϱ}[\varrho] + \XeTeXDeclareMathSymbol{ϕ}{\mathalpha}{\eu@GreekLowercase@symfont}{`ϕ}[\varphi] + \eu@fixgreekcs{α}{alpha} + \eu@fixgreekcs{β}{beta} + \eu@fixgreekcs{γ}{gamma} + \eu@fixgreekcs{δ}{delta} + \eu@fixgreekcs{ε}{epsilon} + \eu@fixgreekcs{ζ}{zeta} + \eu@fixgreekcs{η}{eta} + \eu@fixgreekcs{θ}{theta} + \eu@fixgreekcs{ι}{iota} + \eu@fixgreekcs{κ}{kappa} + \eu@fixgreekcs{λ}{lambda} + \eu@fixgreekcs{μ}{mu} + \eu@fixgreekcs{ν}{nu} + \eu@fixgreekcs{ξ}{xi} + \eu@fixgreekcs{ο}{omicron} + \eu@fixgreekcs{π}{pi} + \eu@fixgreekcs{ρ}{rho} + \eu@fixgreekcs{ς}{varsigma} + \eu@fixgreekcs{σ}{sigma} + \eu@fixgreekcs{τ}{tau} + \eu@fixgreekcs{υ}{upsilon} + \eu@fixgreekcs{φ}{phi} + \eu@fixgreekcs{χ}{chi} + \eu@fixgreekcs{ψ}{psi} + \eu@fixgreekcs{ω}{omega} + \eu@fixgreekcs{ϝ}{digamma} + \eu@fixgreekcs{ϐ}{varbeta} + \eu@fixgreekcs{ϵ}{varepsilon} + \eu@fixgreekcs{ϑ}{vartheta} + \eu@fixgreekcs{ϰ}{varkappa} + \eu@fixgreekcs{ϖ}{varpi} + \eu@fixgreekcs{ϱ}{varrho} + \eu@fixgreekcs{ϕ}{varphi}}} +\newcommand\eu@fixgreekcs[2]{ + \ifcsequal{#2}{eu@cm@#2} + {\relax} + {\expandafter\def\csname #2\endcsname{{"#1}}}} + +%% The FIFTH branch \setmathsfont(Symbols) +%% The symbols are not for now. +%% \newcommand\eu@ScopeSet@Symbols[2][]{ +%% \eu@fontspec{#1}{#2} +%% \def\eu@Symbols@symfont{Symbols:m:n} +%% \let\eu@Symbolsmathsfont\zf@family +%% \eu@booltrue{Symbols}} +%% +%% The FIFTH branch (REDEFINED) \setmathsfont(Symbols) +\newcommand\eu@ScopeSet@Symbols[2][]{\eu@boolfalse{Symbols}} + +%% Just so we know, by "all variant forms" I mean: +%% varbeta varpi cursive beta "omega" style pi +%% varepsilon varrho lunate epsilon rho with tail hooked under +%% vartheta varphi cursive theta cursive phi (or orthotic phi) +%% varkappa varTheta cursive kappa Theta with horizontal bar connected +%% +%% Note that varsigma is not included in this list (varsigma is not a variant +%% form, it is a final form). + +%% Some authors might prefer the normal and variant forms to be exchanged. For +%% example, I prefer \phi to print the orthotic phi and \varphi the cursive phi, +%% contrary to many text fonts. +%% +%% \exchangeforms{<list>} +%% <list> is a CSV list of any of: +%% beta, epsilon, theta, kappa, pi, rho, phi, Theta +\newcommand\exchangeforms[1]{ + \AtBeginDocument{ + \@for\i@for:=#1\do{\eu@booltrue{exchange\i@for forms}} + \eu@ifbooltrue{GreekLowercase} + {\eu@ifbooltrue{exchangebetaforms} + {\XeTeXDeclareMathSymbol{β}{\mathalpha}{\eu@GreekLowercase@symfont}{`ϐ}[\beta] + \XeTeXDeclareMathSymbol{ϐ}{\mathalpha}{\eu@GreekLowercase@symfont}{`β}[\varbeta]} + \eu@ifbooltrue{exchangeepsilonforms} + {\XeTeXDeclareMathSymbol{ε}{\mathalpha}{\eu@GreekLowercase@symfont}{`ϵ}[\epsilon] + \XeTeXDeclareMathSymbol{ϵ}{\mathalpha}{\eu@GreekLowercase@symfont}{`ε}[\varepsilon]} + \eu@ifbooltrue{exchangethetaforms} + {\XeTeXDeclareMathSymbol{θ}{\mathalpha}{\eu@GreekLowercase@symfont}{`ϑ}[\theta] + \XeTeXDeclareMathSymbol{ϑ}{\mathalpha}{\eu@GreekLowercase@symfont}{`θ}[\vartheta]} + \eu@ifbooltrue{exchangekappaforms} + {\XeTeXDeclareMathSymbol{κ}{\mathalpha}{\eu@GreekLowercase@symfont}{`ϰ}[\kappa] + \XeTeXDeclareMathSymbol{ϰ}{\mathalpha}{\eu@GreekLowercase@symfont}{`κ}[\varkappa]} + \eu@ifbooltrue{exchangepiforms} + {\XeTeXDeclareMathSymbol{π}{\mathalpha}{\eu@GreekLowercase@symfont}{`ϖ}[\pi] + \XeTeXDeclareMathSymbol{ϖ}{\mathalpha}{\eu@GreekLowercase@symfont}{`π}[\varpi]} + \eu@ifbooltrue{exchangerhoforms} + {\XeTeXDeclareMathSymbol{ρ}{\mathalpha}{\eu@GreekLowercase@symfont}{`ϱ}[\rho] + \XeTeXDeclareMathSymbol{ϱ}{\mathalpha}{\eu@GreekLowercase@symfont}{`ρ}[\varrho]} + \eu@ifbooltrue{exchangephiforms} + {\XeTeXDeclareMathSymbol{φ}{\mathalpha}{\eu@GreekLowercase@symfont}{`ϕ}[\phi] + \XeTeXDeclareMathSymbol{ϕ}{\mathalpha}{\eu@GreekLowercase@symfont}{`φ}[\varphi]}} + \eu@ifbooltrue{GreekUppercase} + {\eu@ifbooltrue{exhangeThetaforms} + {\XeTeXDeclareMathSymbol{Θ}{\mathalpha}{\eu@GreekUppercase@symfont}{`ϴ}[\Theta] + \XeTeXDeclareMathSymbol{ϴ}{\mathalpha}{\eu@GreekUppercase@symfont}{`Θ}[\varTheta]}}}} +\@onlypreamble\exchangeforms + +%% Some text fonts do not contain all variant forms. For those that don't, +%% after defining the Greek mathematics font, the ‘absent’ variant forms will +%% still be typeset in Computer Modern (usually). +%% +%% \normalisevarforms[<list>] +%% \normalizevarforms[<list>] +%% <list> is a CSV list of any of: +%% beta, epsilon, theta, kappa, pi, rho, phi, Theta +%% +%% This command makes the listed variant forms of Greek symbols equivalent to +%% their normal forms, but only if they do not already exist in the font. For +%% example, if \varbeta and \eu@cm@varbeta are equivalent, then +%% \XeTeXDeclareMathSymbol failed to assign \varbeta to ϐ because ϐ does not +%% exist in the font. +\newcommand\normalisevarforms[1][beta,epsilon,theta,kappa,pi,rho,phi,Theta]{ + \AtBeginDocument{ + \@for\i@for:=#1\do{\eu@booltrue{normalisevar\i@for}} + \eu@ifbooltrue{GreekLowercase} + {\eu@ifbooltrue{normalisevarbeta} + {\ifx\varbeta\eu@cm@varbeta + \XeTeXDeclareMathSymbol{ϐ}{\mathalpha}{\eu@GreekLowercase@symfont}{`β} + \let\varbeta\beta + \fi} + \eu@ifbooltrue{normalisevarepsilon} + {\ifx\varepsilon\eu@cm@varepsilon + \XeTeXDeclareMathSymbol{ϵ}{\mathalpha}{\eu@GreekLowercase@symfont}{`ε} + \let\varepsilon\epsilon + \fi} + \eu@ifbooltrue{normalisevartheta} + {\ifx\vartheta\eu@cm@vartheta + \XeTeXDeclareMathSymbol{ϑ}{\mathalpha}{\eu@GreekLowercase@symfont}{`θ} + \let\vartheta\theta + \fi} + \eu@ifbooltrue{normalisevarkappa} + {\ifx\varkappa\eu@cm@varkappa + \XeTeXDeclareMathSymbol{ϰ}{\mathalpha}{\eu@GreekLowercase@symfont}{`κ} + \let\varkappa\kappa + \fi} + \eu@ifbooltrue{normalisevarpi} + {\ifx\varpi\eu@cm@varpi + \XeTeXDeclareMathSymbol{ϖ}{\mathalpha}{\eu@GreekLowercase@symfont}{`π} + \let\varpi\pi + \fi} + \eu@ifbooltrue{normalisevarrho} + {\ifx\varrho\eu@cm@varrho + \XeTeXDeclareMathSymbol{ϱ}{\mathalpha}{\eu@GreekLowercase@symfont}{`ρ} + \let\varrho\rho + \fi} + \eu@ifbooltrue{normalisevarphi} + {\ifx\varphi\eu@cm@varphi + \XeTeXDeclareMathSymbol{ϕ}{\mathalpha}{\eu@GreekLowercase@symfont}{`φ} + \let\varphi\phi + \fi}} + \eu@ifbooltrue{GreekUppercase}{ + \eu@ifbooltrue{normalisevarTheta} + {\ifx\varTheta\eu@cm@varTheta + \XeTeXDeclareMathSymbol{ϴ}{\mathalpha}{\eu@GreekUppercase@symfont}{`Θ} + \let\varTheta\Theta + \fi}}}} +\@onlypreamble\normalisevarforms +\let\normalizevarforms\normalisevarforms +\@onlypreamble\normalizevarforms + +%% xkeyval things +\define@choicekey[eu] + {Digits}{Arabic}[\eu@DigitsArabic@value\eu@DigitsArabic@@value] + {Regular,Italic,Plain}[Regular]{\relax} +\define@choicekey[eu] + {Latin}{Uppercase}[\eu@LatinUppercase@value\eu@LatinUppercase@@value] + {Regular,Italic,Plain}[Italic]{\relax} +\define@choicekey[eu] + {Latin}{Lowercase}[\eu@LatinLowercase@value\eu@LatinLowercase@@value] + {Regular,Italic,Plain}[Italic]{\relax} +\define@choicekey[eu] + {Greek}{Uppercase}[\eu@GreekUppercase@value\eu@GreekUppercase@@value] + {Regular,Italic,Plain}[Regular]{\relax} +\define@choicekey[eu] + {Greek}{Lowercase}[\eu@GreekLowercase@value\eu@GreekLowercase@@value] + {Regular,Italic,Plain}[Italic]{\relax} + +%% Also say Digits has Uppercase and Lowercase keys, and Latin and Greek both +%% have Arabic key. So that if a superfluous key is accidently sent through the +%% wrong command (possible with \setallmainfonts), then it doesn't blow up. +\define@key[eu]{Digits}{Uppercase}{\relax} +\define@key[eu]{Digits}{Lowercase}{\relax} +\define@key[eu]{Latin}{Arabic}{\relax} +\define@key[eu]{Greek}{Arabic}{\relax} + +%% I hope Will doesn't mind if I patch fontspec. Why? Because these keys are +%% accidently sent through fontspec (e.g. \setallmainfonts does \setmainfont, +%% which is a fontspec command). So I allow fontspec to understand them, but do +%% nothing. +\define@key[zf]{options}{Arabic}{\relax} +\define@key[zf]{options}{Uppercase}{\relax} +\define@key[zf]{options}{Lowercase}{\relax} + +%% Fonts have metrics suitable for text, not for mathematics. Need to kern each +%% letter individually. Previous version took a trial and error approach with +%% \+[<size>] where <size> was determined by trial and error. Now, there is a +%% XeTeX primitive \XeTeXglyphbounds which is used to automatically calculate +%% the required mkern. +%% +%% Some register definitions. \three@digits takes a number and, if it is less +%% than 100, inserts leading zeroes so that it has three digits. +\muskipdef\muskip@\z@ +\muskipdef\muskip@i\@ne +\dimendef\dimen@iv 4\relax +\newcounter{eu@} +\newcounter{eu@i} +\providecommand\three@digits[1]{\ifnum#1<100 0\ifnum#1<10 0\fi\fi\number#1} + +%% \setminwhitespace{<number>} +%% Sets the minimum gap between adjacent characters in mathematics. +%% <number> is in units of mmu (1/1000 mu). So 1 em = 18000 mmu. +%% \eu@minwhitespace is the minimum white space. It's default value is 500 +%% which corresponds to 0.5 mu or 1/36 em. +\newcommand\setminwhitespace[1][500]{\def\eu@minwhitespace{#1}} +\setminwhitespace + +%% \eu@mkern operates over some adjacent character tokens +%% \@eu@mkern operates over individual character tokens +%% +%% Unless I've missed something, it is really, really hard to get information +%% about the font that a mathematics symbol is typeset in, so I devised a series +%% of tests in text mode (\text!) (otherwise the received information will be +%% rubbish, related to the text font outside the mathematics). It would be +%% neater if I do it inside a box that's not printed, instead of an empty +%% \text. The \@eu@mkern algorithm to calculate the mkern might be neater if I +%% use e-TeX's \numexpr and \glueexpr. Maybe \gluetomu might be useful? What I +%% have here already ought to be sufficient but perhaps inefficient. I think +%% optical sizes follow through automatically because \text inherits the +%% surrounding size, is that right? +\newcommand\eu@mkern[1]{% + \@tfor\i@tfor:=#1\do{\expandafter\@eu@mkern\i@tfor}} +\def\eu@get@familyseriesshape#1:#2:#3\@nil{% + \expandafter\fontfamily\csname eu@#1mathsfont\endcsname\selectfont + \ifstrequal{#2}{m}{\mdseries}{\relax}% + \ifstrequal{#2}{bx}{\bfseries}{\relax}% + \ifstrequal{#3}{n}{\upshape}{\relax}% + \ifstrequal{#3}{it}{\itshape}{\relax}} +\def\eu@get@familyseriesshape#1:#2:#3\@nil{% + \def\eu@family{#1}% + \def\eu@series{#2}% + \def\eu@shape{#3}} +\newcounter{mkern} +\newcommand\@eu@mkern[1]{% + \setcounter{mkern}{-1}% + \eu@boolfalse{domkern}% + \eu@ifnumin{`#1}{`0,`9}{\setcounter{mkern}{0}}{\relax}% + \eu@ifnumin{`#1}{`A,`Z}{\setcounter{mkern}{1}}{\relax}% + \eu@ifnumin{`#1}{`a,`z}{\setcounter{mkern}{2}}{\relax}% + \eu@ifnumin{`#1}{`Α,`Ω}{\setcounter{mkern}{3}}{\relax}% + \eu@ifnumin{`#1}{`α,`ω}{\setcounter{mkern}{4}}{\relax}% + \eu@ifnumis{`#1}{`Ϝ,`ϴ}{\setcounter{mkern}{3}}{\relax}% + \eu@ifnumis{`#1}{`ϐ,`ϑ,`ϕ,`ϖ,`ϝ,`ϰ,`ϱ,`ϵ}{\setcounter{mkern}{4}}{\relax}% + \text{% + \ifnum\the\c@mkern>\m@ne + \eu@gbooltrue{domkern}% + \fi + \ifcase\the\c@mkern\relax % If Digits (0) + \ifdef{\eu@DigitsArabic@symfont}% + {\expandafter\eu@get@familyseriesshape\eu@DigitsArabic@symfont\@nil}% + {\global\boolfalse{domkern}}% + \or % If Latin Uppercase (1) + \ifdef{\eu@LatinUppercase@symfont}% + {\expandafter\eu@get@familyseriesshape\eu@LatinUppercase@symfont\@nil}% + {\global\boolfalse{domkern}}% + \or % If Latin Lowercase (2) + \ifdef{\eu@LatinLowercase@symfont}% + {\expandafter\eu@get@familyseriesshape\eu@LatinLowercase@symfont\@nil}% + {\global\boolfalse{domkern}}% + \or % If Greek Uppercase (3) + \ifdef{\eu@GreekUppercase@symfont}% + {\expandafter\eu@get@familyseriesshape\eu@GreekUppercase@symfont\@nil}% + {\global\boolfalse{domkern}}% + \or % If Greek Lowercase (4) + \ifdef{\eu@GreekLowercase@symfont}% + {\expandafter\eu@get@familyseriesshape\eu@GreekLowercase@symfont\@nil}% + {\global\boolfalse{domkern}}% + \fi + \ifdef{\eu@family}% + {\expandafter\fontfamily\csname eu@\eu@family mathsfont\endcsname\selectfont}% + {\relax}% + \ifdef{\eu@series}% + {\expandafter\ifstrequal\expandafter{\eu@series}{m}% + {\mdseries}% + {\relax}% + \expandafter\ifstrequal\expandafter{\eu@series}{bx}% + {\bfseries}% + {\relax}}% + {\relax}% + \ifdef{\eu@shape}% + {\expandafter\ifstrequal\expandafter{\eu@shape}{n}% + {\upshape}% + {\relax}% + \expandafter\ifstrequal\expandafter{\eu@shape}{it}% + {\itshape}% + {\relax}}% + {\relax}% + \global\dimen@\XeTeXglyphbounds\@ne\the\XeTeXcharglyph`#1\relax + \global\dimen@iv\XeTeXglyphbounds\thr@@\the\XeTeXcharglyph`#1} + \dimen@ii 1em + \c@eu@\dimen@ + \c@eu@i\dimen@ii + \multiply\c@eu@ 3000\relax + \divide\c@eu@i 6\relax + \divide\c@eu@\c@eu@i + \c@eu@i\c@eu@ + \ifnum\number\c@eu@ <\eu@minwhitespace + \c@eu@\eu@minwhitespace + \fi + \advance\c@eu@ -\c@eu@i + \c@eu@i\c@eu@ + \divide\c@eu@i\@m + \edef\eu@mkern@left{\number\c@eu@i} + \multiply\c@eu@i\@m + \advance\c@eu@ -\c@eu@i + \edef\eu@mkern@left{\eu@mkern@left.\three@digits{\number\c@eu@}mu} + \dimen@\dimen@iv + \dimen@ii 1em + \c@eu@\dimen@ + \c@eu@i\dimen@ii + \multiply\c@eu@ 3000\relax + \divide\c@eu@i 6\relax + \divide\c@eu@\c@eu@i + \c@eu@i\c@eu@ + \ifnum\number\c@eu@ <\eu@minwhitespace + \c@eu@\eu@minwhitespace + \fi + \advance\c@eu@ -\c@eu@i + \c@eu@i\c@eu@ + \divide\c@eu@i\@m + \edef\eu@mkern@right{\number\c@eu@i} + \multiply\c@eu@i\@m + \advance\c@eu@ -\c@eu@i + \edef\eu@mkern@right{\eu@mkern@right.\three@digits{\number\c@eu@}mu} + \eu@ifbool{domkern} + {\mkern\eu@mkern@left#1\mkern\eu@mkern@right} + {#1}} + +%% Redefine \" and " in maths mode only. Umlaut and quote definitions remain +%% in effect in text mode. +%% +%% " put the " before a character, e.g $"f$, and the character is +%% printed with kerns on either side. +%% \"..." Surround a series of adjacent characters, e.g. $\"abcde"$ is +%% equivalent to $"a"b"c"d"e$. +%% Note that the tokens that " and \" operate on MUST be characters because +%% they are sent through the XeTeX primitive \XeTeXcharglyph as in: +%% +%% \XeTeXglyphbounds n \the\XeTeXcharglyph`#1 +%% +%% where n = 1,2,3,4 and #1 is the character (If #1 is not a character, then +%% \XeTeXcharglyph`#1 doesn't make sense). Higher level tests are needed to +%% avoid this problem. +\let\eu@original@quote=" +\let\eu@original@csquote=\" +\mathcode`\"="8000 +\newcommand\eu@active@quote{% + \ifmmode + \expandafter\eu@new@quote + \else + \expandafter\eu@original@quote + \fi} +\newcommand\eu@active@csquote{% + \ifmmode + \expandafter\eu@new@csquote + \else + \expandafter\eu@original@csquote + \fi} +\begingroup + \catcode`\"=\active + \global\let"=\eu@active@quote +\endgroup +\let\"=\eu@active@csquote +\newcommand\eu@new@quote[1]{\eu@mkern{#1}} +\def\eu@new@csquote#1"{\eu@mkern{#1}} + +%% Redefine LaTeX 2e kernel macros to do Unicode characters too. Add optional +%% fifth argument. This is a list of control sequences which will be let equal +%% to the symbol if the symbol exists in the font. If the symbol does not exist +%% in the font, then the fifth argument is ignored. +%% +%% e.g. \XeTeXDeclareMathSymbol{≠}{\mathrel}{font}{"2260}[\neq\ne] +\def\XeTeXDeclareMathSymbol#1#2#3#4{% + \expandafter\in@\csname sym#3\expandafter\endcsname + \expandafter{\group@list}% + \ifin@ + \begingroup + \if\relax\noexpand#1% is command? + \edef\reserved@a{\noexpand\in@{\string\mathchar}{\meaning#1}}% + \reserved@a + \ifin@ + \expandafter\XeTeXset@mathsymbol + \csname sym#3\endcsname#1#2{#4}% + \@font@info{Redeclaring math symbol \string#1}% + \else + \expandafter\ifx + \csname\expandafter\@gobble\string#1\endcsname + \relax + \expandafter\XeTeXset@mathsymbol + \csname sym#3\endcsname#1#2{#4}% + \else + \@latex@error{Command `\string#1' already defined}\@eha + \fi + \fi + \else + \expandafter\XeTeXset@mathchar + \csname sym#3\endcsname#1#2{#4}% + \fi + \endgroup + \def\XeTeXDeclareMathSymbol@symbol{#1}% + \def\XeTeXDeclareMathSymbol@slot{#4}% + \expandafter\XeTeXDeclareMathSymbol@option + \else + \@latex@error{Symbol font `#3' is not defined}\@eha + \expandafter\@gobbleoarg + \fi} +\@onlypreamble\XeTeXDeclareMathSymbol +\def\XeTeXset@mathchar#1#2#3#4{% + \global\XeTeXmathcode`#2="\mathchar@type#3#1#4\relax} +\@onlypreamble\XeTeXset@mathchar +\def\XeTeXset@mathsymbol#1#2#3#4{% + \global\XeTeXmathchardef#2"\mathchar@type#3#1#4\relax} +\@onlypreamble\XeTeXset@mathsymbol +\newcommand\@gobbleoarg[1][]{} +\newcommand\XeTeXDeclareMathSymbol@option[1][]{% + \ifnum\the\XeTeXcharglyph\XeTeXDeclareMathSymbol@slot>\z@ + \@tfor\i@tfor #1:=\do% + {\expandafter\edef\i@tfor{\expandonce\XeTeXDeclareMathSymbol@symbol}}% + \fi} + +%% Some shorthands, so the same information isn't typed out more than once +%% +%% \setallmainfonts(<sets>)[<shapes, font features>]{<font name>} +%% \setprimaryfont[<shapes, font features>]{<font name>} +%% \setallsansfonts[<shapes, font features>]{<font name>} +%% \setallmonofonts[<shapes, font features>]{<font name>} +\newcommand\setallmainfonts{ + \@ifnextchar( + {\eu@setallmainfonts} + {\eu@setallmainfonts(Digits,Latin,Greek)}} +\def\eu@setallmainfonts(#1){ + \edef\eu@setmathsfont@Set{#1} + \@eu@setallmainfonts} +\newcommand\@eu@setallmainfonts[2][]{ + \setmainfont[#1]{#2} + \setmathsfont(\eu@setmathsfont@Set)[#1]{#2} + \setmathrm[#1]{#2}} +\newcommand\setprimaryfont{\setallmainfonts(Digits,Latin)} +\newcommand\setallsansfonts[2][]{ + \setsansfont[#1]{#2} + \setmathsf[#1]{#2}} +\newcommand\setallmonofonts[2][]{ + \setmonofont[#1]{#2} + \setmathtt[#1]{#2}} + +%% Set the particular mathematics alphabets \ernewcommand\setmathrm[2][]{ \zf@fontspec{#1}{#2} \let\eu@mathrm\zf@family - \let\eu@ifset@mathrm\@firstofone - \providecommand\eu@mathbf@shape{n}} + \DeclareMathAlphabet{\mathrm}{EU1}{\eu@mathrm}{m}{n} + \SetMathAlphabet{\mathrm}{bold}{EU1}{\eu@mathrm}{bx}{n} + \DeclareMathAlphabet{\mathit}{EU1}{\eu@mathrm}{m}{it} + \DeclareMathAlphabet{\mathbf}{EU1}{\eu@mathrm}{bx}{n} + \SetMathAlphabet{\mathit}{bold}{EU1}{\eu@mathrm}{bx}{it} + \DeclareSymbolFont{Operators:m:n}{EU1}{\eu@mathrm}{m}{n} + \def\operator@font{\expandafter\mathgroup\csname symOperators:m:n\endcsname}} \ernewcommand\setmathcal[2][]{ \zf@fontspec{#1}{#2} \let\eu@mathcal\zf@family - \let\eu@ifset@mathcal\@firstofone - \providecommand\eu@mathcal@series{m} - \providecommand\eu@mathcal@shape{n}} + \DeclareMathAlphabet{\mathcal}{EU1}{\eu@mathcal}{m}{n}} \ernewcommand\setmathsf[2][]{ \zf@fontspec{#1}{#2} \let\eu@mathsf\zf@family - \let\eu@ifset@mathsf\@firstofone} + \DeclareMathAlphabet{\mathsf}{EU1}{\eu@mathsf}{m}{n} + \SetMathAlphabet{\mathsf}{bold}{EU1}{\eu@mathsf}{bx}{n}} \ernewcommand\setmathtt[2][]{ \zf@fontspec{#1}{#2} \let\eu@mathtt\zf@family - \let\eu@ifset@mathtt\@firstofone} + \DeclareMathAlphabet{\mathtt}{EU1}{\eu@mathtt}{m}{n}} \ernewcommand\setmathfrak[2][]{ \zf@fontspec{#1}{#2} \let\eu@mathfrak\zf@family - \let\eu@ifset@mathfrak\@firstofone - \providecommand\eu@mathfrak@series{m}} + \DeclareMathAlphabet{\mathfrak}{EU1}{\eu@mathfrak}{m}{n}} \ernewcommand\setmathbb[2][]{ \zf@fontspec{#1}{#2} \let\eu@mathbb\zf@family - \let\eu@ifset@mathbb\@firstofone - \providecommand\eu@mathbb@series{m}} -\newcommand\setprimaryfont[2][]{ - \setmainfont[#1]{#2} - \setmathsfont[Set=Latin,#1]{#2} - \setmathrm[#1]{#2}} -\newcommand\setsansfonts[2][]{ - \setsansfont[#1]{#2} - \setmathsf[#1]{#2}} -\newcommand\setmonofonts[2][]{ - \setmonofont[#1]{#2} - \setmathtt[#1]{#2}} -\newcommand\eu@setmathsfont[1][Set=Special]{ - \eu@setkeys{Scope}{#1} - \ifcase\eu@ScopeSet@@value - \let\eu@ScopeSet@Value\eu@ScopeSet@Special - \or - \let\eu@ScopeSet@Value\eu@ScopeSet@Latin - \or - \let\eu@ScopeSet@Value\eu@ScopeSet@Greek - \or - \let\eu@ScopeSet@Value\eu@ScopeSet@Symbols - \fi - \eu@ScopeSet@Value} -\providecommand\eu@ScopeSet@Special[1]{\relax} -\newcommand\eu@ScopeSet@Latin[1]{ - \eu@setkeys[Uppercase=Italic,Lowercase=Italic,Digits=Regular]{Latin}{\XKV@rm} - \eu@fontspec{\XKV@rm}{#1} - \ifcase\eu@LatinUppercase@@value - \ernewcommand\eu@LatinUppercase@symfont{Lmn} - \let\eu@Latinmathsfont\zf@family - \@eu@LatinUppercase@true - \def\operator@font{\mathgroup\symLmn} - \or - \ernewcommand\eu@LatinUppercase@symfont{Lmit} - \let\eu@Latinmathsfont\zf@family - \@eu@LatinUppercase@true - \or\fi - \ifcase\eu@LatinLowercase@@value - \ernewcommand\eu@LatinLowercase@symfont{Lmn} - \let\eu@Latinmathsfont\zf@family - \@eu@LatinLowercase@true - \or - \ernewcommand\eu@LatinLowercase@symfont{Lmit} - \let\eu@Latinmathsfont\zf@family - \@eu@LatinLowercase@true - \or\fi - \ifcase\eu@LatinDigits@@value - \ernewcommand\eu@LatinDigits@symfont{Lmn} - \let\eu@Latinmathsfont\zf@family - \@eu@LatinDigits@true - \or - \ernewcommand\eu@LatinDigits@symfont{Lmit} - \let\eu@Latinmathsfont\zf@family - \@eu@LatinDigits@true - \or\fi} -\newcommand\eu@ScopeSet@Greek[1]{ - \eu@setkeys[Uppercase=Regular,Lowercase=Italic,Digits=Plain]{Greek}{\XKV@rm} - \eu@fontspec{\XKV@rm}{#1} - \ifcase\eu@GreekUppercase@@value - \ernewcommand\eu@GreekUppercase@symfont{Gmn} - \let\eu@Greekmathsfont\zf@family - \@eu@GreekUppercase@true - \or - \ernewcommand\eu@GreekUppercase@symfont{Gmit} - \let\eu@Greekmathsfont\zf@family - \@eu@GreekUppercase@true - \or\fi - \ifcase\eu@GreekLowercase@@value - \ernewcommand\eu@GreekLowercase@symfont{Gmn} - \let\eu@Greekmathsfont\zf@family - \@eu@GreekLowercase@true - \or - \ernewcommand\eu@GreekLowercase@symfont{Gmit} - \let\eu@Greekmathsfont\zf@family - \@eu@GreekLowercase@true - \or\fi - \ifcase\eu@GreekDigits@@value - \ernewcommand\eu@GreekDigits@symfont{Gmn} - \let\eu@Greekmathsfont\zf@family - \@eu@GreekDigits@true - \or - \ernewcommand\eu@GreekDigits@symfont{Gmit} - \let\eu@Greekmathsfont\zf@family - \@eu@GreekDigits@true - \or\fi} -\newcommand\eu@ScopeSet@Symbols[1]{ - \@eu@Symbols@true - \zf@fontspec{}{#1} - \let\eu@Symbolsmathsfont\zf@family - \def\eu@Symbls@symfont{Smn}} -\renewcommand\eu@ScopeSet@Symbols[1]{ - \@eu@Symbols@false} -\newcommand\eu@VarForms[1]{ - \fontfamily\eu@Greekmathsfont\selectfont - \eu@setkeys{VarForms}{#1} - \ifeu@VarForms@beta - \eu@DeclareMathSymbol{β}{\mathalpha}{\eu@GreekLowercase@symfont}{"3D0}[\beta] - \eu@DeclareMathSymbol{ϐ}{\mathalpha}{\eu@GreekLowercase@symfont}{`β}[\varbeta] - \fi - \ifeu@VarForms@epsilon - \eu@DeclareMathSymbol{ϵ}{\mathalpha}{\eu@GreekLowercase@symfont}{`ε}[\varepsilon] - \eu@DeclareMathSymbol{ε}{\mathalpha}{\eu@GreekLowercase@symfont}{"3F5}[\epsilon] - \fi - \ifeu@VarForms@theta - \eu@DeclareMathSymbol{ϑ}{\mathalpha}{\eu@GreekLowercase@symfont}{`θ}[\vartheta] - \eu@DeclareMathSymbol{θ}{\mathalpha}{\eu@GreekLowercase@symfont}{"3D1}[\theta] - \fi - \ifeu@VarForms@kappa - \eu@DeclareMathSymbol{ϰ}{\mathalpha}{\eu@GreekLowercase@symfont}{`κ}[\varkappa] - \eu@DeclareMathSymbol{κ}{\mathalpha}{\eu@GreekLowercase@symfont}{"3F0}[\kappa] - \fi - \ifeu@VarForms@pi - \eu@DeclareMathSymbol{ϖ}{\mathalpha}{\eu@GreekLowercase@symfont}{`π}[\varpi] - \eu@DeclareMathSymbol{π}{\mathalpha}{\eu@GreekLowercase@symfont}{"3D6}[\pi] - \fi - \ifeu@VarForms@rho - \eu@DeclareMathSymbol{ϱ}{\mathalpha}{\eu@GreekLowercase@symfont}{`ρ}[\varrho] - \eu@DeclareMathSymbol{ρ}{\mathalpha}{\eu@GreekLowercase@symfont}{"3F1}[\rho] - \fi - \ifeu@VarForms@phi - \eu@DeclareMathSymbol{ϕ}{\mathalpha}{\eu@GreekLowercase@symfont}{`φ}[\varphi] - \eu@DeclareMathSymbol{φ}{\mathalpha}{\eu@GreekLowercase@symfont}{"3D5}[\phi] - \fi - \ifeu@VarForms@Theta - \eu@DeclareMathSymbol{ϴ}{\mathalpha}{\eu@GreekLowercase@symfont}{`Θ}[\varTheta] - \eu@DeclareMathSymbol{Θ}{\mathalpha}{\eu@GreekLowercase@symfont}{"3F4}[\Theta] - \fi} -\define@choicekey[eu]{Scope}{Set} - [\eu@ScopeSet@value\eu@ScopeSet@@value] - {Special,Latin,Greek,Symbols}[Special]{\relax} -\define@choicekey[eu]{Latin}{Uppercase} - [\eu@LatinUppercase@value\eu@LatinUppercase@@value] - {Regular,Italic,Plain}[Italic]{\relax} -\define@choicekey[eu]{Latin}{Lowercase} - [\eu@LatinLowercase@value\eu@LatinLowercase@@value] - {Regular,Italic,Plain}[Italic]{\relax} -\define@choicekey[eu]{Latin}{Digits} - [\eu@LatinDigits@value\eu@LatinDigits@@value] - {Regular,Italic,Plain}[Regular]{\relax} -\define@choicekey[eu]{Greek}{Uppercase} - [\eu@GreekUppercase@value\eu@GreekUppercase@@value] - {Regular,Italic,Plain}[Regular]{\relax} -\define@choicekey[eu]{Greek}{Lowercase} - [\eu@GreekLowercase@value\eu@GreekLowercase@@value] - {Regular,Italic,Plain}[Italic]{\relax} -\define@choicekey[eu]{Greek}{Digits} - [\eu@GreekDigits@value\eu@GreekDigits@@value] - {Regular,Italic,Plain}[Regular]{\relax} -\define@boolkey[eu]{VarForms}{beta}[True]{\relax} -\define@boolkey[eu]{VarForms}{epsilon}[True]{\relax} -\define@boolkey[eu]{VarForms}{theta}[True]{\relax} -\define@boolkey[eu]{VarForms}{kappa}[True]{\relax} -\define@boolkey[eu]{VarForms}{pi}[True]{\relax} -\define@boolkey[eu]{VarForms}{rho}[True]{\relax} -\define@boolkey[eu]{VarForms}{phi}[True]{\relax} -\define@boolkey[eu]{VarForms}{Theta}[True]{\relax} -\newcommand\eu@XeTeXDeclareMathSymbol[4]{ - \expandafter\XeTeXmathcode`#1\mathchar@type#2\csname sym#3\endcsname#4} -\newcommand\eu@DeclareMathSymbol[4]{ - \ifnum\XeTeXcharglyph#4>0 - \eu@XeTeXDeclareMathSymbol#1#2#3#4 - \fi - \let\eu@character#1 - \def\eu@@character{#4} - \futurelet\@tempa\eu@@DeclareMathSymbol} -\def\eu@@DeclareMathSymbol{ - \ifx\@tempa[ - \let\eu@@@DeclareMathSymbol\eu@DeclareMathSymbol@option - \else - \let\eu@@@DeclareMathSymbol\relax - \fi - \eu@@@DeclareMathSymbol} -\def\eu@DeclareMathSymbol@option[#1]{% - \ifnum\XeTeXcharglyph\eu@@character>0 - \let#1\eu@character - \fi} -\let\LaTeXe@DeclareMathSymbol\DeclareMathSymbol -\newcommand\eu@LaTeXe@DeclareMathSymbol[4]{ - \ifnum\XeTeXcharglyph#4>0 - \LaTeXe@DeclareMathSymbol{#1}{#2}{#3}{#4} - \fi} -\let\DeclareMathSymbol\eu@LaTeXe@DeclareMathSymbol - -\newcommand\eu@DeclareFonts{ - \let\eu@if@Latin\@gobble - \if@eu@LatinUppercase@\let\eu@if@Latin\@firstofone\fi - \if@eu@LatinLowercase@\let\eu@if@Latin\@firstofone\fi - \if@eu@LatinDigits@\let\eu@if@Latin\@firstofone\fi - \let\eu@if@Greek\@gobble - \if@eu@GreekUppercase@\let\eu@if@Greek\@firstofone\fi - \if@eu@GreekLowercase@\let\eu@if@Greek\@firstofone\fi - \if@eu@GreekDigits@\let\eu@if@Greek\@firstofone\fi - \eu@if@Latin{ - \DeclareSymbolFont{Lmn}{EU1}{\eu@Latinmathsfont}{m}{n} - \DeclareSymbolFont{Lmit}{EU1}{\eu@Latinmathsfont}{m}{it} - } - \eu@if@Greek{ - \DeclareSymbolFont{Gmn}{EU1}{\eu@Greekmathsfont}{m}{n} - \DeclareSymbolFont{Gmit}{EU1}{\eu@Greekmathsfont}{m}{it}} - \if@eu@Symbols@ - \DeclareSymbolFont{Smn}{EU1}{\eu@Symbolsmathsfont}{m}{n} - \fi} -\newcommand\eu@DeclareDigits{ - \let\eu@if@Digits\@gobble - \if@eu@GreekDigits@ - \let\eu@if@Digits\@firstofone - \let\eu@Digits@symfont\eu@GreekDigits@symfont - \let\eu@Digitsmathsfont\eu@Greekmathsfont - \else - \if@eu@LatinDigits@ - \let\eu@if@Digits\@firstofone - \let\eu@Digits@symfont\eu@LatinDigits@symfont - \let\eu@Digitsmathsfont\eu@Latinmathsfont - \fi - \fi - \eu@if@Digits{ - \fontfamily\eu@Digitsmathsfont\selectfont - \DeclareMathSymbol{0}{\mathord}{\eu@Digits@symfont}{`0} - \DeclareMathSymbol{1}{\mathord}{\eu@Digits@symfont}{`1} - \DeclareMathSymbol{2}{\mathord}{\eu@Digits@symfont}{`2} - \DeclareMathSymbol{3}{\mathord}{\eu@Digits@symfont}{`3} - \DeclareMathSymbol{4}{\mathord}{\eu@Digits@symfont}{`4} - \DeclareMathSymbol{5}{\mathord}{\eu@Digits@symfont}{`5} - \DeclareMathSymbol{6}{\mathord}{\eu@Digits@symfont}{`6} - \DeclareMathSymbol{7}{\mathord}{\eu@Digits@symfont}{`7} - \DeclareMathSymbol{8}{\mathord}{\eu@Digits@symfont}{`8} - \DeclareMathSymbol{9}{\mathord}{\eu@Digits@symfont}{`9}}} -\newcommand\eu@DeclareLatinUppercase{ - \if@eu@LatinUppercase@ - \fontfamily\eu@Latinmathsfont\selectfont - \DeclareMathSymbol{A}{\mathalpha}{\eu@LatinUppercase@symfont}{`A} - \DeclareMathSymbol{B}{\mathalpha}{\eu@LatinUppercase@symfont}{`B} - \DeclareMathSymbol{C}{\mathalpha}{\eu@LatinUppercase@symfont}{`C} - \DeclareMathSymbol{D}{\mathalpha}{\eu@LatinUppercase@symfont}{`D} - \DeclareMathSymbol{E}{\mathalpha}{\eu@LatinUppercase@symfont}{`E} - \DeclareMathSymbol{F}{\mathalpha}{\eu@LatinUppercase@symfont}{`F} - \DeclareMathSymbol{G}{\mathalpha}{\eu@LatinUppercase@symfont}{`G} - \DeclareMathSymbol{H}{\mathalpha}{\eu@LatinUppercase@symfont}{`H} - \DeclareMathSymbol{I}{\mathalpha}{\eu@LatinUppercase@symfont}{`I} - \DeclareMathSymbol{J}{\mathalpha}{\eu@LatinUppercase@symfont}{`J} - \DeclareMathSymbol{K}{\mathalpha}{\eu@LatinUppercase@symfont}{`K} - \DeclareMathSymbol{L}{\mathalpha}{\eu@LatinUppercase@symfont}{`L} - \DeclareMathSymbol{M}{\mathalpha}{\eu@LatinUppercase@symfont}{`M} - \DeclareMathSymbol{N}{\mathalpha}{\eu@LatinUppercase@symfont}{`N} - \DeclareMathSymbol{O}{\mathalpha}{\eu@LatinUppercase@symfont}{`O} - \DeclareMathSymbol{P}{\mathalpha}{\eu@LatinUppercase@symfont}{`P} - \DeclareMathSymbol{Q}{\mathalpha}{\eu@LatinUppercase@symfont}{`Q} - \DeclareMathSymbol{R}{\mathalpha}{\eu@LatinUppercase@symfont}{`R} - \DeclareMathSymbol{S}{\mathalpha}{\eu@LatinUppercase@symfont}{`S} - \DeclareMathSymbol{T}{\mathalpha}{\eu@LatinUppercase@symfont}{`T} - \DeclareMathSymbol{U}{\mathalpha}{\eu@LatinUppercase@symfont}{`U} - \DeclareMathSymbol{V}{\mathalpha}{\eu@LatinUppercase@symfont}{`V} - \DeclareMathSymbol{W}{\mathalpha}{\eu@LatinUppercase@symfont}{`W} - \DeclareMathSymbol{X}{\mathalpha}{\eu@LatinUppercase@symfont}{`X} - \DeclareMathSymbol{Y}{\mathalpha}{\eu@LatinUppercase@symfont}{`Y} - \DeclareMathSymbol{Z}{\mathalpha}{\eu@LatinUppercase@symfont}{`Z} - \fi} -\newcommand\eu@DeclareLatinLowercase{ - \if@eu@LatinLowercase@ - \fontfamily\eu@Latinmathsfont\selectfont - \DeclareMathSymbol{a}{\mathalpha}{\eu@LatinLowercase@symfont}{`a} - \DeclareMathSymbol{b}{\mathalpha}{\eu@LatinLowercase@symfont}{`b} - \DeclareMathSymbol{c}{\mathalpha}{\eu@LatinLowercase@symfont}{`c} - \DeclareMathSymbol{d}{\mathalpha}{\eu@LatinLowercase@symfont}{`d} - \DeclareMathSymbol{e}{\mathalpha}{\eu@LatinLowercase@symfont}{`e} - \DeclareMathSymbol{f}{\mathalpha}{\eu@LatinLowercase@symfont}{`f} - \DeclareMathSymbol{g}{\mathalpha}{\eu@LatinLowercase@symfont}{`g} - \DeclareMathSymbol{h}{\mathalpha}{\eu@LatinLowercase@symfont}{`h} - \DeclareMathSymbol{i}{\mathalpha}{\eu@LatinLowercase@symfont}{`i} - \DeclareMathSymbol{j}{\mathalpha}{\eu@LatinLowercase@symfont}{`j} - \DeclareMathSymbol{k}{\mathalpha}{\eu@LatinLowercase@symfont}{`k} - \DeclareMathSymbol{l}{\mathalpha}{\eu@LatinLowercase@symfont}{`l} - \DeclareMathSymbol{m}{\mathalpha}{\eu@LatinLowercase@symfont}{`m} - \DeclareMathSymbol{n}{\mathalpha}{\eu@LatinLowercase@symfont}{`n} - \DeclareMathSymbol{o}{\mathalpha}{\eu@LatinLowercase@symfont}{`o} - \DeclareMathSymbol{p}{\mathalpha}{\eu@LatinLowercase@symfont}{`p} - \DeclareMathSymbol{q}{\mathalpha}{\eu@LatinLowercase@symfont}{`q} - \DeclareMathSymbol{r}{\mathalpha}{\eu@LatinLowercase@symfont}{`r} - \DeclareMathSymbol{s}{\mathalpha}{\eu@LatinLowercase@symfont}{`s} - \DeclareMathSymbol{t}{\mathalpha}{\eu@LatinLowercase@symfont}{`t} - \DeclareMathSymbol{u}{\mathalpha}{\eu@LatinLowercase@symfont}{`u} - \DeclareMathSymbol{v}{\mathalpha}{\eu@LatinLowercase@symfont}{`v} - \DeclareMathSymbol{w}{\mathalpha}{\eu@LatinLowercase@symfont}{`w} - \DeclareMathSymbol{x}{\mathalpha}{\eu@LatinLowercase@symfont}{`x} - \DeclareMathSymbol{y}{\mathalpha}{\eu@LatinLowercase@symfont}{`y} - \DeclareMathSymbol{z}{\mathalpha}{\eu@LatinLowercase@symfont}{`z} - \fi} -\newcommand\eu@DeclareGreekUppercase{ - \if@eu@GreekUppercase@ - \fontfamily\eu@Greekmathsfont\selectfont - \eu@DeclareMathSymbol{Α}{\mathalpha}{\eu@GreekUppercase@symfont}{`Α}[\Alpha] - \eu@DeclareMathSymbol{Β}{\mathalpha}{\eu@GreekUppercase@symfont}{`Β}[\Beta] - \eu@DeclareMathSymbol{Γ}{\mathalpha}{\eu@GreekUppercase@symfont}{`Γ}[\Gamma] - \eu@DeclareMathSymbol{Δ}{\mathalpha}{\eu@GreekUppercase@symfont}{`Δ}[\Delta] - \eu@DeclareMathSymbol{Ε}{\mathalpha}{\eu@GreekUppercase@symfont}{`Ε}[\Epsilon] - \eu@DeclareMathSymbol{Ζ}{\mathalpha}{\eu@GreekUppercase@symfont}{`Ζ}[\Zeta] - \eu@DeclareMathSymbol{Η}{\mathalpha}{\eu@GreekUppercase@symfont}{`Η}[\Eta] - \eu@DeclareMathSymbol{Θ}{\mathalpha}{\eu@GreekUppercase@symfont}{`Θ}[\Theta] - \eu@DeclareMathSymbol{Ι}{\mathalpha}{\eu@GreekUppercase@symfont}{`Ι}[\Iota] - \eu@DeclareMathSymbol{Κ}{\mathalpha}{\eu@GreekUppercase@symfont}{`Κ}[\Kappa] - \eu@DeclareMathSymbol{Λ}{\mathalpha}{\eu@GreekUppercase@symfont}{`Λ}[\Lambda] - \eu@DeclareMathSymbol{Μ}{\mathalpha}{\eu@GreekUppercase@symfont}{`Μ}[\Mu] - \eu@DeclareMathSymbol{Ν}{\mathalpha}{\eu@GreekUppercase@symfont}{`Ν}[\Nu] - \eu@DeclareMathSymbol{Ξ}{\mathalpha}{\eu@GreekUppercase@symfont}{`Ξ}[\Xi] - \eu@DeclareMathSymbol{Ο}{\mathalpha}{\eu@GreekUppercase@symfont}{`Ο}[\Omicron] - \eu@DeclareMathSymbol{Π}{\mathalpha}{\eu@GreekUppercase@symfont}{`Π}[\Pi] - \eu@DeclareMathSymbol{Ρ}{\mathalpha}{\eu@GreekUppercase@symfont}{`Ρ}[\Rho] - \eu@DeclareMathSymbol{Σ}{\mathalpha}{\eu@GreekUppercase@symfont}{`Σ}[\Sigma] - \eu@DeclareMathSymbol{Τ}{\mathalpha}{\eu@GreekUppercase@symfont}{`Τ}[\Tau] - \eu@DeclareMathSymbol{Υ}{\mathalpha}{\eu@GreekUppercase@symfont}{`Υ}[\Upsilon] - \eu@DeclareMathSymbol{Φ}{\mathalpha}{\eu@GreekUppercase@symfont}{`Φ}[\Phi] - \eu@DeclareMathSymbol{Χ}{\mathalpha}{\eu@GreekUppercase@symfont}{`Χ}[\Chi] - \eu@DeclareMathSymbol{Ψ}{\mathalpha}{\eu@GreekUppercase@symfont}{`Ψ}[\Psi] - \eu@DeclareMathSymbol{Ω}{\mathalpha}{\eu@GreekUppercase@symfont}{`Ω}[\Omega] - \eu@DeclareMathSymbol{ϴ}{\mathalpha}{\eu@GreekUppercase@symfont}{"3F4}[\varTheta] - \eu@DeclareMathSymbol{Ϝ}{\mathalpha}{\eu@GreekUppercase@symfont}{"3DC}[\Digamma] - \fi} -\newcommand\eu@DeclareGreekLowercase{ - \if@eu@GreekLowercase@ - \fontfamily\eu@Greekmathsfont\selectfont - \eu@DeclareMathSymbol{α}{\mathalpha}{\eu@GreekLowercase@symfont}{`α}[\alpha] - \eu@DeclareMathSymbol{β}{\mathalpha}{\eu@GreekLowercase@symfont}{`β}[\beta] - \eu@DeclareMathSymbol{γ}{\mathalpha}{\eu@GreekLowercase@symfont}{`γ}[\gamma] - \eu@DeclareMathSymbol{δ}{\mathalpha}{\eu@GreekLowercase@symfont}{`δ}[\delta] - \eu@DeclareMathSymbol{ε}{\mathalpha}{\eu@GreekLowercase@symfont}{`ε}[\epsilon] - \eu@DeclareMathSymbol{ζ}{\mathalpha}{\eu@GreekLowercase@symfont}{`ζ}[\zeta] - \eu@DeclareMathSymbol{η}{\mathalpha}{\eu@GreekLowercase@symfont}{`η}[\eta] - \eu@DeclareMathSymbol{θ}{\mathalpha}{\eu@GreekLowercase@symfont}{`θ}[\theta] - \eu@DeclareMathSymbol{ι}{\mathalpha}{\eu@GreekLowercase@symfont}{`ι}[\iota] - \eu@DeclareMathSymbol{κ}{\mathalpha}{\eu@GreekLowercase@symfont}{`κ}[\kappa] - \eu@DeclareMathSymbol{λ}{\mathalpha}{\eu@GreekLowercase@symfont}{`λ}[\lambda] - \eu@DeclareMathSymbol{μ}{\mathalpha}{\eu@GreekLowercase@symfont}{`μ}[\mu] - \eu@DeclareMathSymbol{ν}{\mathalpha}{\eu@GreekLowercase@symfont}{`ν}[\nu] - \eu@DeclareMathSymbol{ξ}{\mathalpha}{\eu@GreekLowercase@symfont}{`ξ}[\xi] - \eu@DeclareMathSymbol{ο}{\mathalpha}{\eu@GreekLowercase@symfont}{`ο}[\omicron] - \eu@DeclareMathSymbol{π}{\mathalpha}{\eu@GreekLowercase@symfont}{`π}[\pi] - \eu@DeclareMathSymbol{ρ}{\mathalpha}{\eu@GreekLowercase@symfont}{`ρ}[\rho] - \eu@DeclareMathSymbol{σ}{\mathalpha}{\eu@GreekLowercase@symfont}{`σ}[\sigma] - \eu@DeclareMathSymbol{τ}{\mathalpha}{\eu@GreekLowercase@symfont}{`τ}[\tau] - \eu@DeclareMathSymbol{υ}{\mathalpha}{\eu@GreekLowercase@symfont}{`υ}[\upsilon] - \eu@DeclareMathSymbol{φ}{\mathalpha}{\eu@GreekLowercase@symfont}{`φ}[\phi] - \eu@DeclareMathSymbol{χ}{\mathalpha}{\eu@GreekLowercase@symfont}{`χ}[\chi] - \eu@DeclareMathSymbol{ψ}{\mathalpha}{\eu@GreekLowercase@symfont}{`ψ}[\psi] - \eu@DeclareMathSymbol{ω}{\mathalpha}{\eu@GreekLowercase@symfont}{`ω}[\omega] - \eu@DeclareMathSymbol{ς}{\mathalpha}{\eu@GreekLowercase@symfont}{`ς}[\varsigma] - \eu@DeclareMathSymbol{ϐ}{\mathalpha}{\eu@GreekLowercase@symfont}{"3D0}[\varbeta] - \eu@DeclareMathSymbol{ϵ}{\mathalpha}{\eu@GreekLowercase@symfont}{"3F5}[\varepsilon] - \eu@DeclareMathSymbol{ϑ}{\mathalpha}{\eu@GreekLowercase@symfont}{"3D1}[\vartheta] - \eu@DeclareMathSymbol{ϰ}{\mathalpha}{\eu@GreekLowercase@symfont}{"3F0}[\varkappa] - \eu@DeclareMathSymbol{ϖ}{\mathalpha}{\eu@GreekLowercase@symfont}{"3D6}[\varpi] - \eu@DeclareMathSymbol{ϱ}{\mathalpha}{\eu@GreekLowercase@symfont}{"3F1}[\varrho] - \eu@DeclareMathSymbol{ϕ}{\mathalpha}{\eu@GreekLowercase@symfont}{"3D5}[\varphi] - \eu@DeclareMathSymbol{ϝ}{\mathalpha}{\eu@GreekLowercase@symfont}{"3DD}[\digamma] - \fi} -\newcommand\eu@DeclareSymbols{ - \if@eu@Symbols@ - \fontfamily\eu@Symbolsmathsfont\selectfont - \eu@DeclareMathSymbol{!}{\mathclose}{\eu@Symbols@symfont}{`!}[\exclam] - \eu@DeclareMathSymbol{+}{\mathbin}{\eu@Symbols@symfont}{`+}[\plus] - \eu@DeclareMathSymbol{,}{\mathpunct}{\eu@Symbols@symfont}{`,} - \eu@DeclareMathSymbol{.}{\mathord}{\eu@Symbols@symfont}{`.} - \XeTeXmathchardef\ldotp=6\symSmn`. - \eu@DeclareMathSymbol{:}{\mathrel}{\eu@Symbols@symfont}{`:} - \XeTeXmathchardef\colon=6\symSmn`: - \eu@DeclareMathSymbol{;}{\mathpunct}{\eu@Symbols@symfont}{`;}[\semicolon] - \eu@DeclareMathSymbol{<}{\mathrel}{\eu@Symbols@symfont}{`<}[\less] - \DeclareMathSymbol{=}{\mathrel}{\eu@Symbols@symfont}{`=} - \let\eq== - \eu@DeclareMathSymbol{>}{\mathrel}{\eu@Symbols@symfont}{`>}[\greater] - \eu@DeclareMathSymbol{?}{\mathclose}{\eu@Symbols@symfont}{`?} - \eu@DeclareMathSymbol{¬}{\mathord}{\eu@Symbols@symfont}{`¬}[\neg] - \let\lnot\neg - \eu@DeclareMathSymbol{°}{\mathord}{\eu@Symbols@symfont}{`°}[\degree] - \eu@DeclareMathSymbol{±}{\mathbin}{\eu@Symbols@symfont}{`±}[\pm] - \eu@DeclareMathSymbol{µ}{\mathord}{\eu@Symbols@symfont}{`µ}[\micro] - \eu@DeclareMathSymbol{×}{\mathbin}{\eu@Symbols@symfont}{`×}[\times] - \eu@DeclareMathSymbol{÷}{\mathbin}{\eu@Symbols@symfont}{`÷}[\div] - \eu@DeclareMathSymbol{∀}{\mathord}{\eu@Symbols@symfont}{`∀}[\forall] - \eu@DeclareMathSymbol{∂}{\mathord}{\eu@Symbols@symfont}{`∂}[\partial] - \eu@DeclareMathSymbol{∃}{\mathord}{\eu@Symbols@symfont}{`∃}[\exists] - \eu@DeclareMathSymbol{∅}{\mathord}{\eu@Symbols@symfont}{`∅}[\varnothing] - \eu@DeclareMathSymbol{∆}{\mathord}{\eu@Symbols@symfont}{`∆}[\increment] - \eu@DeclareMathSymbol{∇}{\mathord}{\eu@Symbols@symfont}{`∇}[\nabla] - \eu@DeclareMathSymbol{∈}{\mathrel}{\eu@Symbols@symfont}{`∈}[\in] - \eu@DeclareMathSymbol{∉}{\mathrel}{\eu@Symbols@symfont}{`∉}[\notin] - \eu@DeclareMathSymbol{∋}{\mathrel}{\eu@Symbols@symfont}{`∋}[\ni] - \let\owns\ni - \eu@DeclareMathSymbol{-}{\mathbin}{\eu@Symbols@symfont}{`−} - \eu@DeclareMathSymbol{−}{\mathbin}{\eu@Symbols@symfont}{`−}[\minus] - \eu@DeclareMathSymbol{∕}{\mathbin}{\eu@Symbols@symfont}{`∕}[\slash] - \eu@DeclareMathSymbol{*}{\mathbin}{\eu@Symbols@symfont}{`∗} - \eu@DeclareMathSymbol{∗}{\mathbin}{\eu@Symbols@symfont}{`∗}[\ast] - \eu@DeclareMathSymbol{∙}{\mathbin}{\eu@Symbols@symfont}{`∙}[\vysmblkcircle] - \let\bullet\vysmblkcircle - \eu@DeclareMathSymbol{∝}{\mathrel}{\eu@Symbols@symfont}{`∝}[\propto] - \eu@DeclareMathSymbol{∞}{\mathord}{\eu@Symbols@symfont}{`∞}[\infty] - \eu@DeclareMathSymbol{∟}{\mathord}{\eu@Symbols@symfont}{`∟}[\rightangle] - \eu@DeclareMathSymbol{∠}{\mathord}{\eu@Symbols@symfont}{`∠}[\angle] - \eu@DeclareMathSymbol{∧}{\mathbin}{\eu@Symbols@symfont}{`∧}[\wedge] - \let\land\wedge - \eu@DeclareMathSymbol{∨}{\mathbin}{\eu@Symbols@symfont}{`∨}[\vee] - \let\lor\vee - \eu@DeclareMathSymbol{∩}{\mathbin}{\eu@Symbols@symfont}{`∩}[\cap] - \eu@DeclareMathSymbol{∪}{\mathbin}{\eu@Symbols@symfont}{`∪}[\cup] - \eu@DeclareMathSymbol{∴}{\mathord}{\eu@Symbols@symfont}{`∴}[\therefore] - \eu@DeclareMathSymbol{∼}{\mathrel}{\eu@Symbols@symfont}{`∼}[\sim] - \eu@DeclareMathSymbol{≅}{\mathrel}{\eu@Symbols@symfont}{`≅}[\cong] - \eu@DeclareMathSymbol{≈}{\mathrel}{\eu@Symbols@symfont}{`≈}[\approx] - \eu@DeclareMathSymbol{≠}{\mathrel}{\eu@Symbols@symfont}{`≠}[\neq] - \let\ne\neq - \eu@DeclareMathSymbol{≡}{\mathrel}{\eu@Symbols@symfont}{`≡}[\equiv] - \eu@DeclareMathSymbol{≤}{\mathrel}{\eu@Symbols@symfont}{`≤}[\leq] - \let\le\leq - \eu@DeclareMathSymbol{≥}{\mathrel}{\eu@Symbols@symfont}{`≥}[\geq] - \let\ge\geq - \eu@DeclareMathSymbol{⊂}{\mathrel}{\eu@Symbols@symfont}{`⊂}[\subset] - \eu@DeclareMathSymbol{⊃}{\mathrel}{\eu@Symbols@symfont}{`⊃}[\supset] - \eu@DeclareMathSymbol{⊄}{\mathrel}{\eu@Symbols@symfont}{`⊄}[\nsubset] - \let\notsubset\nsubset - \eu@DeclareMathSymbol{⊆}{\mathrel}{\eu@Symbols@symfont}{`⊆}[\subseteq] - \eu@DeclareMathSymbol{⊇}{\mathrel}{\eu@Symbols@symfont}{`⊇}[\supseteq] - \eu@DeclareMathSymbol{⊕}{\mathbin}{\eu@Symbols@symfont}{`⊕}[\oplus] - \eu@DeclareMathSymbol{⊗}{\mathbin}{\eu@Symbols@symfont}{`⊗}[\otimes] - \eu@DeclareMathSymbol{⊥}{\mathord}{\eu@Symbols@symfont}{`⊥}[\bot] - \let\perp\bot - \eu@DeclareMathSymbol{⋅}{\mathbin}{\eu@Symbols@symfont}{`⋅}[\cdot] - \XeTeXmathchardef\cdotp=6\symSmn`⋅ - \fi} -\AtBeginDocument{ - \if@eu@amsmathloaded@\else - \eu@isloaded[\PackageError{mathspec}{Package amsmath must be loaded before mathspec}{}]{amsmath} - \fi - \eu@DeclareFonts - \eu@ifnot@plaindigits{\eu@DeclareDigits} - \eu@DeclareLatinUppercase - \eu@DeclareLatinLowercase - \eu@DeclareGreekUppercase - \eu@DeclareGreekLowercase - \eu@DeclareSymbols - \eu@if@varforms{\eu@VarForms} - \eu@ifset@mathrm{ - \DeclareMathAlphabet{\mathrm}{EU1}{\eu@mathrm}{m}{n} - \SetMathAlphabet{\mathrm}{bold}{EU1}{\eu@mathrm}{bx}{n} - \DeclareMathAlphabet{\mathit}{EU1}{\eu@mathrm}{m}{it} - \DeclareMathAlphabet{\mathbf}{EU1}{\eu@mathrm}{bx}{\eu@mathbf@shape} - \SetMathAlphabet{\mathit}{bold}{EU1}{\eu@mathrm}{bx}{it} - \@ifundefined{symLmn}{\relax}{\def\operator@font{\mathgroup\symLmn}}} - \eu@ifset@mathcal{ - \DeclareMathAlphabet{\mathcal}{EU1}{\eu@mathcal}{\eu@mathcal@series}{\eu@mathcal@shape}} - \eu@ifset@mathsf{ - \DeclareMathAlphabet{\mathsf}{EU1}{\eu@mathsf}{m}{n} - \SetMathAlphabet{\mathsf}{bold}{EU1}{\eu@mathsf}{bx}{n}} - \eu@ifset@mathtt{ - \DeclareMathAlphabet{\mathtt}{EU1}{\eu@mathtt}{m}{n}} - \eu@ifset@mathfrak{ - \DeclareMathAlphabet{\mathfrak}{EU1}{\eu@mathfrak}{\eu@mathfrak@series}{n}} - \eu@ifset@mathbb{ - \DeclareMathAlphabet{\mathbb}{EU1}{\eu@mathbb}{\eu@mathbb@series}{n}} - \fontfamily\rmdefault\selectfont - \let\DeclareMathSymbol\LaTeXe@DeclareMathSymbol} + \DeclareMathAlphabet{\mathbb}{EU1}{\eu@mathbb}{m}{n}} + +%% If amsmath is loaded, it must be loaded before mathspec. Checking for its +%% existence \AtBeginDocument is too late because the damage is already done +%% (It attempted to define \varTheta when mathspec already defined it). Or +%% should I delay the definition of \varTheta until \AtBeginDocument? +\let\original@RequirePackage\RequirePackage +\renewcommand\RequirePackage[2][]{ + \ifstrequal{#2}{amsmath} + {\PackageError{mathspec} + {`amsmath' must be loaded earlier than `mathspec'} + {Edit the document so that `amsmath' is required earlier than `mathspec'.}} + {\relax} + \original@RequirePackage[#1]{#2}} +\@onlypreamble\RequirePackage +\let\usepackage\RequirePackage +\@onlypreamble\usepackage + +%% Any font changes that mathspec has done are reset by LaTeX 2ε at +%% \begin{document} using \process@table. + \endinput + +%% © Andrew Gilbert Moschou 2009 %% -%% End of file `mathspec.sty'. +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3c +%% of this license or (at your option) any later version. +%% The latest version of this license is in: +%% +%% http://www.latex-project.org/lppl.txt +%% +%% and version 1.3c or later is part of all recent distributions of LaTeX. +%% +%% This work has the LPPL maintenance status ‘maintained’. +%% +%% The Current Maintainer of this work is Andrew Gilbert Moschou. +%% +%% This work consists of the files mathspec.sty and mathsepc4.tex. + |