% \iffalse meta-comment
%
% © Andrew Gilbert Moschou 2008
%fontspec
% 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.
%
% \fi
%
% \iffalse
%<package>\NeedsTeXFormat{LaTeX2e}[2005/12/01]
%<package>\ProvidesPackage{mathspec}[2009/08/29 v0.16 LaTeX Package (Mathematics font selection for XeLaTeX)]
%<*internal>
\begingroup
%</internal>
%<*batchfile>
%%
%% © Andrew Gilbert Moschou 2008
%%
%% 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.
%%

\input docstrip.tex
\keepsilent
\usedir{tex/xelatex/mathspec}
\preamble

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.

\endpreamble
\askforoverwritefalse
\generate{\file{mathspec.sty}{\from{mathspec.dtx}{package}}}
%</batchfile>
%<batchfile>\endbatchfile
%<*internal>
\nopreamble
\generate{\file{mathspec.ins}{\from{mathspec.dtx}{batchfile}}}
\endgroup
%</internal>
%
%<*driver>
\documentclass[a4paper]{ltxdoc}
\usepackage{amsmath}
\DeclareSymbolFont{AMSb}{U}{msb}{m}{n}
\makeatletter
\DeclareMathSymbol{\eu@digamma}{\mathord}{AMSb}{"7A}
\usepackage[MnSymbol,normalskips]{mathspec}
\setprimaryfont[Numbers={OldStyle,Proportional}]{Sabon LT Std}
\setmonofonts[Numbers=OldStyle,Scale=MatchLowercase]{Consolas}
\setsansfonts[Numbers={OldStyle,Proportional},Scale=MatchLowercase]{Candara}
\usepackage{eukdate}
\def\@seccntformat#1{%
  \protect\makebox[0pt][r]{\csname the#1\endcsname\hspace{1\@ptsize pt}}}
\DeclareRobustCommand{\MakeSC}[1]{{%
      \def\reserved@a##1##2{\let##2##1\reserved@a}%
      \expandafter\reserved@a\@uclclist\reserved@b{\reserved@b\@gobble}%
      \protected@edef\reserved@a{{\scshape\lowercase{#1}}}%
      \reserved@a
   }}
\protected@edef\MakeSC#1{\MakeSC{#1}}
\global\let\MakeSCorLowercase\MakeSC
\newcommand\orLowercase{\let\l@section\l@sectionLC}
\renewcommand\section{\@startsection {section}{1}{\z@}%
                                   {-3.5ex \@plus -1ex \@minus -.2ex}%
                                   {2.3ex \@plus.2ex}%
                                   {\normalfont\Large\MakeSCorLowercase}}
\renewcommand\subsection{\@startsection{subsection}{2}{\z@}%
                                     {-3.25ex\@plus -1ex \@minus -.2ex}%
                                     {1.5ex \@plus .2ex}%
                                     {\normalfont\large\itshape}}
\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}%
                                     {-3.25ex\@plus -1ex \@minus -.2ex}%
                                     {1.5ex \@plus .2ex}%
                                     {\normalfont\normalsize\itshape}}
\newcommand\STIX{\MakeSC{STIX}}
\usepackage{graphicx}
\usepackage{booktabs}
\usepackage[xetex,usenames]{color}
\def\abovetopsep{1ex}
\usepackage{metalogo}
\setlogokern{Te}{-0.084em}
\setlogokern{eX}{-0.063em}
\setlogokern{eT}{-0.074em}
\setlogokern{Xe}{-0.063em}
\setlogokern{eL}{-0.068em}
\setlogokern{La}{-0.305em}
\setlogokern{aT}{-0.07313em}
\setlogokern{X2}{0.101em}
\setlogodrop{0.131em}
\setLaTeXa{%
  \ifdim\fontdimen\@ne\font=\z@\else
    \addfontfeature{FakeSlant=\the\fontdimen\@ne\font}%
  \fi
  \if b\expandafter\@car\f@series\@nil
    \check@mathfonts\fontsize\sf@size\z@
    \math@fontsfalse\selectfont A%
  \else
    \scshape a%
  \fi}
\setLaTeXee{\mbox{\STIXGeneral\itshape ε}}
\newcommand\closebracket{\char"5D}
\renewcommand\backslash{\char"5C}
\newcommand\permitbreak{\linebreak[0]}
\definecolor{eured}{rgb}{.8,.1,.2}
\newcommand\te[1]{\textcolor{eured}{#1}}
\newcommand\eg{e.g.\ }
\renewcommand\labelitemi{\char"2022}
\long\def\@makecaption#1#2{%
  \vskip\abovecaptionskip
  \sbox\@tempboxa{\MakeSC{#1:} #2}%
  \ifdim \wd\@tempboxa >\hsize
    \MakeSC{#1:} #2\par
  \else
    \global \@minipagefalse
    \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
  \fi
  \vskip\belowcaptionskip}
\frenchspacing
\let\@meta\meta
\renewcommand\meta[1]{{%
  \ifmmode
    \let\@@meta\relax
  \else
    \let\@@meta\rmfamily
  \fi
  \@@meta\@meta{#1}}}
\newcommand\displaycommand[2]{%
  \begin{center}\ttfamily%
  \fbox{\string#1#2}%
  \end{center}}
\fontspec[Scale=MatchLowercase]{Bembo MT}
\let\eu@Bembo\zf@family
\DeclareSymbolFont{BemboMTmn}{EU1}{\eu@Bembo}{m}{n}
\DeclareSymbolFont{BemboMTmit}{EU1}{\eu@Bembo}{m}{it}
\newcommand\BemboMathematics{
  \XeTeXmathcode `f = 7 \symBemboMTmit `f
  \XeTeXmathcode `x = 7 \symBemboMTmit `x
  \XeTeXmathcode `c = 7 \symBemboMTmit `c
  \XeTeXmathcode `e = 7 \symBemboMTmit `e
  \XeTeXmathcode `j = 7 \symBemboMTmit `j
  \XeTeXmathcode `n = 7 \symBemboMTmit `n
  \XeTeXmathcode `d = 7 \symBemboMTmn `d
  \XeTeXmathcode `1 = 0 \symBemboMTmn `1
  \XeTeXmathcode `2 = 0 \symBemboMTmn `2}
\newcommand\biggerskips{
  \thinmuskip=4mu
  \medmuskip=5mu plus 2mu minus 4mu
  \thickmuskip=6mu plus 5mu}
\newcommand\grp[3]{\left#1#3\right#2}
\renewcommand\contentsname{Table of Contents}
\renewcommand*\l@section[2]{%
  \ifnum \c@tocdepth >\z@
    \addpenalty\@secpenalty
    \addvspace{1.0em \@plus\p@}%
    \setlength\@tempdima{1.5em}%
    \begingroup
      \parindent \z@ \rightskip \@pnumwidth
      \parfillskip -\@pnumwidth
      \leavevmode
      \advance\leftskip\@tempdima
      \hskip -\leftskip
      \MakeSC{#1}\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
    \endgroup
  \fi}
\newcommand*\l@sectionLC[2]{%
  \ifnum \c@tocdepth >\z@
    \addpenalty\@secpenalty
    \addvspace{1.0em \@plus\p@}%
    \setlength\@tempdima{1.5em}%
    \begingroup
      \parindent \z@ \rightskip \@pnumwidth
      \parfillskip -\@pnumwidth
      \leavevmode
      \advance\leftskip\@tempdima
      \hskip -\leftskip
      \MakeLowercase{#1}\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
    \endgroup
  \fi}
\setcounter{tocdepth}{2}
\renewcommand\tableofcontents{%
  \begin{multicols}{2}[\section*{\contentsname}]%
    \small\@starttoc{toc}%
  \end{multicols}}
\renewenvironment{theglossary}
  {\small\list{}{}
     \item\relax
     \glossary@prologue\GlossaryParms
     \let\item\@idxitem \ignorespaces
     \def\pfill{\hspace*{\fill}}}
  {\endlist}
\newfontfamily\STIXGeneral[Scale=MatchLowercase]{STIXGeneral}
\usepackage{multirow}
\newcommand\tablerow[3]{
  \STIXGeneral #1 & \ttfamily\string#3 & \STIXGeneral\itshape #2 &
  \ttfamily\MakeLowercase{\string#3}}
\hyphenation{se-par-ate math-ema-tics math-ema-tic cor-res-pond-ing de-spite bene-fits ela-borate des-cribed rom-an}
\makeatother
\setmathsfont[Set=Greek,Scale=MatchLowercase]{STIXGeneral}
\normalvarforms
\EnableCrossrefs
\CodelineIndex
\RecordChanges
\begin{document}
  \DocInput{mathspec.dtx}
\end{document}
%</driver>
% \fi
%
% \CheckSum{1829}
%
% \GetFileInfo{mathspec.sty}
%
% \DoNotIndex{
%  \@argdef,\@eu@GreekDigits@true,\@eu@GreekLowercase@true,\@eu@GreekUppercase@true,
%  \@eu@LatinDigits@true,\@eu@LatinLowercase@true,\@eu@LatinUppercase@true,
%  \@eu@Symbols@false,\@eu@Symbols@true,\@firstofone,\@gobble,\@ifdefinable,\@ifnext,
%  \@ifnexta,\@ifpackageloaded,\@ifundefined,\@latex@info,\@rc@ifdefinable,
%  \@star@or@long,\@tempa,\@tempb,\@tempc,\@tempd,\@undefined,\@xargdef}
% \DoNotIndex{
%   \AtBeginDocument,\csname,\CurrentOption,\DeclareMathAlphabet,\DeclareMathSymbol,
%   \DeclareOption,\DeclareSymbolFont,\def,\define@boolkey,\define@choicekey,\edef,
%   \else,\endcsname,\ensuremath,\expandafter}
% \DoNotIndex{
%   \fi,\fontfamily,\futurelet,\ifcase,\ifnum,\ifthenelse,\ifx,\isempty,\let,\long,
%   \mathalpha,\makeatother,\mathbin,\mathchar@type,\mathclose,\mathgroup,\mathord,
%   \mathpunct,\meaning,\mskip,\newcommand,\newif,\noexpand,\or,\PackageError,
%   \PackageWarning,\PassOptionsToPackage,\presetkeys,\ProcessOptions,\protect,
%   \providecommand,\relax,\renewcommand,\RequirePackage,\reserved@a,\reserved@b}
% \DoNotIndex{
%   \selectfont,\setkeys,\SetMathAlphabet,\string,\strip@prefix,\unexpanded,\x@protect,
%   \XKV@rm}
%
% \makeatletter
% \title{The \textsf{mathspec} package\\[1ex]\normalsize version \expandafter\@gobble\fileversion}
% \author{Andrew Gilbert Moschou\\\texttt{andmos@gmail.com}}
% \makeatletter\let\@today\today\def\today{\MakeSC{\@today}}\makeatother
%
% \maketitle
%
% \tableofcontents
%
%\section{Preamble}
%
%This document describes the |mathspec| package, a package that provides an interface to typeset mathematics in \XeLaTeX\ using arbitrary text fonts. It relies on |fontspec| to work and familiarity with |fontspec| is advised. Thanks to Will Robertson for his useful advice and suggestions!
%
%The package is in its developmental stage and later versions are likely to be incompatible with this version.
%
%\section{Introduction}
%
%Since Jonathan Kew released \XeTeX, an extension to \TeX\ that permits the inclusion of system wide Unicode fonts and modern font technologies in \TeX\ documents, users have been able to easily typeset documents using readily available fonts such as Hoefler Text and Times New Roman (This document is typeset using Sabon \MakeSC{LT} Std). Will Robertson’s \XeLaTeX\ package |fontspec| provides an automatic font selection process for such arbitrary fonts. Still, mathematics typesetting has not benefited from this development to the same extent as text typesetting, which is not surprising given the font requirements that are demanded.
%
%Will Robertson has in development a package |unicode-math| that is used to typeset mathematics using some font that has an OpenType mathematics table. Currently, the only two that are available are Cambria Math, a new design, by Microsoft and Asana Math, based on Hermann Zapf’s Palatino, by Apostolos Syropoulos. It is expected that the \STIX\ fonts, based on Times, may also be used.
%
%Thus, it is evident that a book designer is confronted with such narrow variety in mathematics typefaces, even considering already established \LaTeX\ packages such as |euler| (and Computer Modern, of course!) that are dedicated to providing mathematics typefaces; and the book designer is challenged to find a suitable pair of typefaces for mathematics and body text.
%
%This package provides mathematics alphabets in any of the same typefaces that are available to \XeTeX, using |fontspec| as a back end. Other mathematics symbols such as arrows and operators, whose designs are largely independent of an alphabetic typeface, can be taken from collections like MnSymbol or Computer Modern and are not covered by the scope of this package.
%
%\section{Implementation}
%
%\displaycommand\usepackage{\oarg{|mathspec| and |fontspec| options}\char"7B mathspec\char"7D}
%
%\noindent To use the package, put |\usepackage{mathspec}| in the preamble of the document. It is not necessary to put |\usepackage{requirepackagefontspec}| because |mathspec| will ensure that |fontspec| is loaded anyway. To load |fontspec| with some options, parse them through |mathspec|, for example, |\usepackage|\permitbreak|[quiet]|\permitbreak|{mathspec}| is equivalent to |\usepackage|\permitbreak|[quiet]|\permitbreak|{fontspec}|\permitbreak|\usepackage|\permitbreak|{mathspec}|.
%
%Actually, |mathspec| ordinarily loads |fontspec| with the |no-math| option. To cancel this, explicitly use the |math| option: \eg|\usepackage[math]{mathspec}|.
%
%\subsection{Letters and Digits}
%
%\displaycommand\setmathsfont
%  {[Set=\meta{set},\meta{shapes},\meta{font features}]\marg{font name}}
%
%\noindent \DescribeMacro{\setmathsfont}\DescribeMacro{\setmathfont}This single command is used to entirely describe the desired font for some use. Usually, the command would appear up to two times in a document, to specify each the Latin and the Greek fonts. The command can be used only in the preamble, that is before |\begin{document}| because \LaTeX\ will not allow it to be used elsewhere. Then, there can be only one Latin mathematics typeface and one Greek mathematics typeface in the document (The different fonts in section~\ref{sec:ic} of this document was only achieved through trickery).
%
%\begin{description}
%\item[\meta{set}]Compulsory value for key |Set|.
%
%|Latin|, |Greek|.
%
%\item[\meta{shapes}]Optional comma separated list of keys.
%
%A comma separated list of keys and their values, \eg|(Uppercase=Regular,|\permitbreak|Lowercase=Italic,|\permitbreak|Digits=Regular)|. Keys are |Uppercase|, |Lowercase| and |Digits| which can each have value |Regular|, |Italic| or |Plain|; |Regular| and |Italic| respectively indicate the regular and italic fonts of the typeface, |Plain| indicates that no font assignment is performed by |mathspec|, and that the symbols will by typeset in the default font, which is usually Computer Modern. If a key is absent, its default value, as indicated in table~\ref{tab:shapes}, is used.
%
%The default values are very good and you would be wise not to change the Latin and the digit shapes. The Greek shapes can be changed to adhere to some particular style, for example all italic, or because the specified Greek font has only one shape regular.
%\begin{table}[htbp]\centering
%\caption{The default shapes for the symbol sets}\label{tab:shapes}
%\begin{tabular}{@{}ccccc@{}}\toprule
%        & \multicolumn{2}{@{}c@{}}{Latin} & \multicolumn{2}{@{}c@{}}{Greek} \\\cmidrule(lr){2-3}\cmidrule(l){4-5}
%Digits  & Uppercase & Lowercase           & Uppercase  & Lowercase    \\\midrule
%Regular & Italic    & Italic              & Regular    & Italic       \\\bottomrule
%\end{tabular}\end{table}
%
%\DescribeMacro{\plaindigits}It is clear that the digits can be typeset by only one font at any one time. By default, if only one set is specified (Latin or Greek), then the digits are typeset using the font that is used for the set or if both sets are specified, then the digits are typset using the Latin font, unless this choice is overridden. The choice can be overridden by explicitely writing |Digits=Regular| or |Digits=Plain| in the optional argument to |\setmathsfont|, or with the command |\plaindigits|, which might be an easier way to cancel the assignment of a new font for the digits.
%
%\item[\meta{font features}\textrm{, }\meta{font name}]\meta{font features} optional comma separated list, \meta{font name} compulsory argument.
%
%These are the same arguments as those used by |\fontspec| and are interpreted by |fontspec|. See |fontspec|’s documentation for details.
%\end{description}
%
%\subsection{Symbols}
%
%Support for setting the symbols font was removed in this version. I am focussing on the other areas of the package and feel that an incomplete feature should not be present at all.
%
%You can try MnSymbol, which has greater (and more uniform) coverage, with the package option |MnSymbol|, \eg|\usepackage[MnSymbol]{mathspec}|. Note that MnSymbol is a third party package by Achim Blumensath, which can only be used if additionally installed.
%
%\section{Alphabets}
%
%\DescribeMacro{\setmathrm}\DescribeMacro{\setmathcal}\DescribeMacro{\setmathsf}\DescribeMacro{\setmathtt}\DescribeMacro{\setmathfrak}\DescribeMacro{\setmathbb}The mathematics alphabets like |\mathrm| and |\mathcal| can be set using the commands:
%\begin{itemize}
%\item|\setmathrm|\oarg{font features}\marg{font name} (defines |\mathrm|, |\mathit|, |\mathbf| and the font for operators)
%\item|\setmathcal|\oarg{font features}\marg{font name} (defines |\mathcal|)
%\item|\setmathsf|\oarg{font features}\marg{font name} (defines |\mathsf|)
%\item|\setmathtt|\oarg{font features}\marg{font name} (defines |\mathtt|)
%\item|\setmathfrak|\oarg{font features}\marg{font name} (defines |\mathfrak|)
%\item|\setmathbb|\oarg{font features}\marg{font name} (defines |\mathbb|)
%\end{itemize}
%All are straight forward, but |\setmathrm| does a little more than the others. |mathspec| redefines |fontspec|’s definitions.
%\subsection{Shorthands}
%
%\displaycommand\setprimaryfont{\oarg{font features}\marg{font name}}
%
%\noindent \DescribeMacro{\setprimaryfont}|\setprimaryfont| is equivalent to:
%\begin{flushleft}\ttfamily
%\string\setmainfont\oarg{font features}\marg{font name}\\
%\string\setmathsfont[Set=Latin,\meta{font features}]\marg{font name}\\
%\string\setmathrm\oarg{font features}\marg{font name}
%\end{flushleft}and is useful to save typing the same information multiple times.
%
%\begin{center}\ttfamily
%\fbox{\begin{tabular}{@{}c@{}}
%  \string\setsansfonts\oarg{font features}\marg{font name}\\
%  \string\setmonofonts\oarg{font features}\marg{font name}
%  \end{tabular}}
%\end{center}
%Similarly, \DescribeMacro{\setsansfonts}\DescribeMacro{\setmonofonts}|\setsansfonts| and |\setmonofonts| (note the plurals) are equivalent to:
%\begin{flushleft}\ttfamily
%\string\setsansfont\oarg{font features}\marg{font name}\\
%\string\setmathsf\oarg{font features}\marg{font name}
%\end{flushleft}and
%\begin{flushleft}\ttfamily
%\string\setmonofont\oarg{font features}\marg{font name}\\
%\string\setmathtt\oarg{font features}\marg{font name}
%\end{flushleft}respectively.
%
%See |fontspec|’s documentation for details of |\setmainfont|, |\setsansfont| and |\setmonofont|.
%
%\subsection{Limitations}
%
%Apparently, there is a limit on the number of math groups (symbol fonts and alphabets) that a document may contain. It seems that 16 is the limit, which is enforced by \LaTeXe{} kernel macros. I am under the impression that \XeTeX{} actually permits 256 math groups, but I have not found that redefined \LaTeX{} macros alleviates the problem.
%
%Maybe I am going about this the wrong way, but until I truly understand what’s going on and improve this area, beware ‘{\ttfamily! LaTeX Error: Too many math alphabets used in version normal.}’.
%
%\section{Greek characters}
%
%For reference, the Greek alphabet and variant letter forms is given in table~\ref{tab:greek}. Despite the name, |\varsigma|~$\varsigma$ is not a variant form of |\sigma|~$\sigma\+$, it is the final form. Digamma~{\STIXGeneral Ϝ} is an obsolete letter of the alphabet, originally placed between epsilon~$\epsilon$ and zeta~$\zeta\+$.
%
%\begin{table}[htbp]\centering
%\caption{The Greek alphabet and variant letter forms with control sequences\label{tab:greek}}
%\begin{tabular}{@{}c@{}}\toprule
%\begin{tabular}{@{}clcl@{\hspace{2em}}clcl@{}}
%\multicolumn{2}{@{}c@{}}{Uppercase} & \multicolumn{2}{@{}c@{\hspace{2em}}}{Lowercase} &
%\multicolumn{2}{@{}c@{}}{Uppercase} & \multicolumn{2}{@{}c@{}}{Lowercase} \\\midrule
%\tablerow{Α}{α}{\Alpha}   &\tablerow{Ξ}{ξ}{\Xi}\\
%\tablerow{Β}{β}{\Beta}    &\tablerow{Ο}{ο}{\Omicron}\\
%\tablerow{Γ}{γ}{\Gamma}   &\tablerow{Π}{π}{\Pi}\\
%\tablerow{Δ}{δ}{\Delta}   &\tablerow{Ρ}{ρ}{\Rho}\\
%\tablerow{Ε}{ε}{\Epsilon} &\multirow{2}*{\STIXGeneral Σ}&\multirow{2}*{\ttfamily\string\Sigma}& \STIXGeneral\itshape ς & \ttfamily\string\varsigma\\
%\tablerow{Ζ}{ζ}{\Zeta}    &&& \STIXGeneral\itshape σ & \ttfamily\string\sigma\\
%\tablerow{Η}{η}{\Eta}     &\tablerow{Τ}{τ}{\Tau}\\
%\tablerow{Θ}{θ}{\Theta}   &\tablerow{Υ}{υ}{\Upsilon}\\
%\tablerow{Ι}{ι}{\Iota}    &\tablerow{Φ}{ϕ}{\Phi}\\
%\tablerow{Κ}{κ}{\Kappa}   &\tablerow{Χ}{χ}{\Chi}\\
%\tablerow{Λ}{λ}{\Lambda}  &\tablerow{Ψ}{ψ}{\Psi}\\
%\tablerow{Μ}{μ}{\Mu}      &\tablerow{Ω}{ω}{\Omega}\\
%\tablerow{Ν}{ν}{\Nu}      &\STIXGeneral\char"3DC &\ttfamily\string\Digamma &\STIXGeneral\itshape\char"3DD &\ttfamily\string\digamma
%\end{tabular}\\\toprule
%\begin{tabular}{@{}ccl@{\hspace{2em}}ccl@{}}
%Normal form & \multicolumn{2}{@{}c@{\hspace{2em}}}{Variant form} &
%Normal form & \multicolumn{2}{@{}c@{}}{Variant form} \\\midrule
%\STIXGeneral\itshape β &\STIXGeneral\itshape ϐ &\ttfamily\string\varbeta&
%\STIXGeneral\itshape π &\STIXGeneral\itshape ϖ &\ttfamily\string\varpi\\
%\STIXGeneral\itshape ε &\STIXGeneral\itshape ϵ &\ttfamily\string\varepsilon&
%\STIXGeneral\itshape ρ &\STIXGeneral\itshape ϱ &\ttfamily\string\varrho\\
%\STIXGeneral\itshape θ &\STIXGeneral\itshape ϑ &\ttfamily\string\vartheta&
%\STIXGeneral\itshape ϕ &\STIXGeneral\itshape φ &\ttfamily\string\varphi\\
%\STIXGeneral\itshape κ &\STIXGeneral\itshape ϰ &\ttfamily\string\varkappa&
%\STIXGeneral Θ &\STIXGeneral ϴ &\ttfamily\string\varTheta\\
%\end{tabular}\\\bottomrule
%\end{tabular}\end{table}
%
%Initially, |mathspec| defines control sequences for the Greek characters that are absent in Computer Modern, because they are similar in form to Latin characters, from \MakeSC{ASCII}, thus control sequences like |\Alpha| and |\omicron| are defined. Any variant forms that are absent are equivalent to the normal forms. The meanings of these control sequences are preserved by a control sequence of the same name with the prefix |cm| (e.g. |\cmAlpha|), which may be recalled after the Greek mathematics font is changed.
%
%\DescribeMacro{\normalvarforms}Since not all fonts contain all variant forms, there might be the odd variant letter that remains in Computer Modern while other Greek letters have changed font. For these characters, the command |\normalvarforms| will make then equivalent to their corresponding normal forms. Note that this command only adjusts those that are absent in the font. Of course, this might mean that, for example, |\vartheta| and |\theta| would print the same glyph, which would be dubious if they are used in the same document, with different meanings.
%
%\DescribeMacro{\varforms}If an author does not agree with the font designer’s choice of normal and variant forms, for example, I prefer |\phi| to print ‘$\varphi\+$’ and |\varphi| to print ‘$\phi\+$’, which is not the default behaviour for many fonts, the forms can be exchanged by putting the list of letters to the command |\varforms|, \eg|\varforms{theta,kappa,phi}| might be used if the Greek mathematics font is Garamond Premier Pro Italic.
%
%It should be noted that |\epsilon| prints the lunate epsilon~‘$\cmepsilon$’ and |\varepsilon| prints the usual (double loop) epsilon~‘$\cmvarepsilon$’ in Plain \TeX\ and \LaTeX. This is in contrast to other fonts, which contain the lunate style epsilon separately from the Greek alphabet among variant letter forms and symbols (where Unicode assigns ‘Greek Lunate Epsilon Symbol’). The definition of |\LaTeXe|, which prints ‘\LaTeXe’ uses |\varepsilon| and care should be taken to ensure that |\LaTeXe| uses the usual epsilon either by using one of the methods that were presented in this section or by redefining |\LaTeXe| (possibly using my \texttt{metalogo} package), because \setLaTeXee{\mbox{\STIXGeneral\itshape ϵ}}‘\LaTeXe’ is not as good as \setLaTeXee{\mbox{\STIXGeneral\itshape ε}}‘\LaTeXe’.
%
%\section{Additional information}
%
%This section describes the shortcomings of this package. I wonder whether the benefits of being able to use an arbitrary font for mathematics outweigh the detriments; in a production environment, it might be best to seek an alternative approach and use some \LaTeX\ set, like MathTime, MinionPro, Math Design or the \MakeSC{TX} or \MakeSC{PX} fonts, that is dedicated to producing good mathematics with one font.
%
%\subsection{Glyph bounds}\label{sec:ic}
%
%In using this package to provide arbitrary fonts for mathematics, there are issues with glyph bounds (similar to italic correction), as illustrated in the equations:
%\begin{align}
%\BemboMathematics f(x) &= \BemboMathematics \sum_{n=-\infty}^{\infty}{c_ne^{jnx}}\label{eq:2}\\
%\BemboMathematics  c_n &= \BemboMathematics \frac{1}{2\pi}\int_{-\pi}^{\pi}{f(x)e^{-jnx}\,\mathrm{d}x}\label{eq:3}
%\end{align}
%where the function $f$ is too close the parenthesis $($ and the exponent $jnx$ is so close to its base $e$ that there is actually a collision! The reason is that the font has metrics that are suitable for use in text, but not for mathematics.
%
% \subsubsection{Discussion}
%
%Comparing the alphabets typeset in Computer Modern Italic, in table~\ref{tab:2}, it is shown that many characters have greater space around them in the mathematics version, which does not exist in the text version. The tracked alphabet shows the alphabet typeset as text, but also with a constant 1\,mu intercharacter space (poor man’s tracking). Since the adjusted alphabet is approximately as long as the mathematics alphabet, on average, this is a fair method to increase the space between alphabetic characters in mathematics.
%
%\begin{table}[htbp]\centering
%\caption{Computer Modern Italic in text and mathematics\label{tab:2}}
%\begin{tabular}{@{}rl@{}}\toprule
%Text & \usefont{OT1}{cmr}{m}{it}abcdefghijklmnopqrstuvwxyz\\
%Mathematics & $\mathnormal{abcdefghijklmnopqrstuvwxyz}$\\
%Tracked & \usefont{OT1}{cmr}{m}{it} a\+b\+c\+d\+e\+f\+g\+h\+i\+j\+k\+l\+m\+n\+o\+p\+q\+r\+s\+t\+u\+v\+w\+x\+y\+z\\\bottomrule
%\end{tabular}
%\end{table}
%
%Now, the problem lies with implementing this behaviour. The best way would be to adjust \TeX’s mathematics spacing rules to add this 1\,mu extra space after each |\mathalpha|, but not after the |\mathord|s. I do not know whether it is possible to separate the two types as such, since they are almost equivalent. Otherwise, would it look worse if |\mathord|s also have this extra space?
%
%As it turns out, \TeX’s mathematics spacing rules are hardwired into \TeX\ and can not be adjusted by the user. The table that is used to determine the spacing between pairs of adjacent atoms, from \emph{The \TeX book}, is reproduced below:
%\begin{center}\begin{tabular}{@{}r@{ }lc@{\;\;}c@{\;\;}c@{\;\;}c@{\;\;}c@{\;\;}c@{\;\;}c@{\;\;}c@{}}\toprule
% && \multicolumn{8}{@{}c@{}}{Right atom} \\ \cmidrule(l){3-10}
%\multicolumn{2}{@{}c@{}}{Left atom}& Ord. & Op. & Bin. & Rel. & Open & Close & Punct. & Inner\\ \cmidrule(r){1-2}\cmidrule(l){3-10}
%Ordinary, et al.&(Ord.) & 0 & 1 & \te{2} & \te{3} & 0 & 0 & 0 & \te{1} \\ 
%Large operator&(Op.) & 1 & 1 &  & \te{3} & 0 & 0 & 0 & \te{1} \\ 
%Binary operation&(Bin.)& \te{2} & \te{2} &  &  & \te{2} &  &  & \te{2} \\ 
%Relation&(Rel.)& \te{3} & \te{3} &  & 0 & \te{3} & 0 & 0 & \te{3} \\ 
%Opening&(Open)& 0 & 0 &  & 0 & 0 & 0 & 0 & 0 \\ 
%Closing&(Close)& 0 & 1 & \te{2} & \te{3} & 0 & 0 & 0 & \te{1} \\ 
%Punctuation&(Punct.)& \te{1} & \te{1} &  & \te{1} & \te{1} & \te{1} & \te{1} & \te{1} \\ 
%Delimited subformula&(Inner)& \te{1} & 1 & \te{2} & \te{3} & \te{1} & 0 & \te{1} & \te{1} \\\bottomrule
%\end{tabular}\end{center}where 0, 1, 2 and 3 represent zero, thin, medium and thick skips respectively and coloured entries indicate that space is to be inserted only in display and text styles and not in script and scriptscript styles. Both Plain \TeX\ and \LaTeX\ define the three skips as:
%\begin{center}\begin{tabular}{@{}rl@{}}\toprule
%|\thinmuskip| & |3mu|\\
%|\medmuskip| & |4mu plus 3mu minus 4mu|\\
%|\thickmuskip| & |5mu plus 5mu|\\\bottomrule
%\end{tabular}\end{center}and unless the option |normalskips| to the package is used (\eg|\usepackage|\permitbreak|[normalskips]|\permitbreak|{mathspec}|), |mathspec| increases each skip by 1\,mu:
%\begin{center}\begin{tabular}{@{}rl@{}}\toprule
%|\thinmuskip| & |4mu|\\
%|\medmuskip| & |5mu plus 3mu minus 4mu|\\
%|\thickmuskip| & |6mu plus 5mu|\\\bottomrule
%\end{tabular}\end{center}As far as I can tell, nothing can be done about the zero skip.\biggerskips
%
%If \XeTeX\ is able to get information about the ‘ink box’ of a character, this elaborate, awkward and ugly hack, which is not even good anyway, might be replaced with something that is more elegant (or at least yields better results); better yet, if \XeTeX\ allows customisation of the mathematics spacing rules. It is impossible at the moment, for now, this described method is the best that is possible.
%
% \subsubsection{Solution}
%
%\displaycommand\+{\oarg{size}}
%
%\noindent \DescribeMacro{\+}The command |\+| is used to produce fine control over the spacing in mathematics. Without its optional argument, it inserts a 1\,mu ($\frac{1}{18}$\,em) skip. |\+|\oarg{size} inserts a \meta{size}\,mu skip. The spacing of equations~(\ref{eq:2}, \ref{eq:3}) are improved by the replacements that are described in table~\ref{tab:3}:
%\begin{align}
% \BemboMathematics f(x) &= \BemboMathematics \sum_{n=-\infty}^{\infty}{c_ne^{jnx}} & \BemboMathematics f\grp(){x} &= \BemboMathematics \sum_{n=-\infty}^{\infty}{c_ne^{\+[5]jn\+x}}\label{eq:4}\\
%       \BemboMathematics  c_n &= \BemboMathematics \frac{1}{2\pi}\int_{-\pi}^{\pi}{f(x)e^{-jnx}\,\mathrm{d}x} & \BemboMathematics        c_n &= \BemboMathematics \frac{1}{2\pi}\int_{-\pi}^{\pi}{\+f\grp(){x}e^{\+-jn\+x}\,\mathrm{d}x}\label{eq:5}
%\end{align}
%\begin{table}[htbp]\centering
%\caption{Example replacements that improve spacing\label{tab:3}}
%\begin{tabular}{@{}cc@{}}\toprule
%Original & Replacement \\\midrule
%|f(x)|    & |\+f\left(x\right)|\\
%|e^{jnx}| & |e^{\+[5]jn\+x}|\\
%|e^{-jnx}| & |e^{\+-jn\+x}|\\\bottomrule
%\end{tabular}
%\end{table}
%
%This procedure is indeed awkward for the user, but still necessary to produce decent results. Note that |(x)| is replaced with |\left(x\right)|, which should always be done anyway (or with a more convenient macro, perhaps |\grp(){x}| defined by |\newcommand|\permitbreak|\grp|\permitbreak|[3]|\permitbreak|{\left#1|\permitbreak|#3|\permitbreak|\right#2}|).
%
%\subsection{Compatibility}
%
%If the package |amsmath| is used, it must be loaded before |mathspec|.
%
% \newpage 
% \StopEventually{
%   \addfontfeature{Mapping=tex-text}
%   \global\let\MakeSCorLowercase\MakeSC
%   \PrintIndex}
%
% \addtocontents{toc}{\protect\orLowercase}
% \global\let\MakeSCorLowercase\MakeLowercase
% \section{\sffamily mathspec.sty}
%
% \subsection{Initialising and options processing}
% \iffalse
%<*package>
% \fi
%    \begin{macrocode}
\let\eu@ifnot@normalskips\@firstofone
\let\eu@if@MnSymbol\@gobble
\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*{\PassOptionsToPackage{\CurrentOption}{fontspec}}
\ProcessOptions\relax
\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
%    \end{macrocode}
% Redefine the skips.
%    \begin{macrocode}
\eu@ifnot@normalskips{
  \thinmuskip=4mu
  \medmuskip=5mu plus 2mu minus 4mu
  \thickmuskip=6mu plus 5mu}
%    \end{macrocode}
%\begin{macro}{\eu@isloaded}
% A command to test whether a package is loaded and puts the result in a Boolean. Used to test for |amsmath| here and |\AtBeginDocument| because |amsmath|, if used, must be loaded before |mathspec|.
%    \begin{macrocode}
\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}
%    \end{macrocode}
%\end{macro}
%
% \subsection{Greek characters and digits}
%
% Complete the missing Greek characters from \MakeSC{ASCII}. Easier done now than later.
%    \begin{macrocode}
\DeclareMathSymbol{\Alpha}{\mathalpha}{operators}{"41}
\DeclareMathSymbol{\Beta}{\mathalpha}{operators}{"42}
\DeclareMathSymbol{\Epsilon}{\mathalpha}{operators}{"45}
\DeclareMathSymbol{\Zeta}{\mathalpha}{operators}{"5A}
\DeclareMathSymbol{\Eta}{\mathalpha}{operators}{"48}
\DeclareMathSymbol{\Iota}{\mathalpha}{operators}{"49}
\DeclareMathSymbol{\Kappa}{\mathalpha}{operators}{"4B}
\DeclareMathSymbol{\Mu}{\mathalpha}{operators}{"4D}
\DeclareMathSymbol{\Nu}{\mathalpha}{operators}{"4E}
\DeclareMathSymbol{\Omicron}{\mathalpha}{operators}{"4F}
\DeclareMathSymbol{\Rho}{\mathalpha}{operators}{"50}
\DeclareMathSymbol{\Tau}{\mathalpha}{operators}{"54}
\DeclareMathSymbol{\Chi}{\mathalpha}{operators}{"58}
\DeclareMathSymbol{\omicron}{\mathord}{letters}{"6F}
%    \end{macrocode}
% Unavailable variant forms are equivalent to normal forms. Using Latin ‘{\usefont{OT1}{cmr}{m}{n}F}’ for \makeatletter digamma~$\eu@digamma$ \makeatother is better than nothing.
%    \begin{macrocode}
\let\varbeta\beta
\@ifundefined{varkappa}
  {\let\varkappa\kappa}
  {\relax}
\let\varTheta\Theta
\@ifundefined{digamma}
  {\DeclareMathSymbol{\Digamma}{\mathalpha}{operators}{"46}
   \DeclareMathSymbol{\digamma}{\mathord}{operators}{"46}}
  {\let\Digamma\digamma}
%    \end{macrocode}
% Preserve the original definitions of the Greek control sequences with |cm| prefix.
%    \begin{macrocode}
\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
%    \end{macrocode}
%
% \subsection{Internal commands}
%
%\begin{macro}{\ernewcommand}
% Useful macros and internal commands.
%    \begin{macrocode}
\RequirePackage{etoolbox}
\@gobble{\providecommand\expandonce[1]{\unexpanded\expandafter{#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}}}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\eu@DeclareRobustCommand}
% |breqn|’s |\@ifnext| replaces |\@ifnextchar| in the definition of \LaTeX’s |\DeclareRobustCommand|. This is needed for the definition of |\+|.
%    \begin{macrocode}
\def\@ifnext#1#2#3{%
  \let\@tempd=#1%
  \def\@tempa{#2}%
  \def\@tempb{#3}%
  \futurelet\@tempc\@ifnexta}
\def\@ifnexta{%
  \ifx\@tempc\@tempd%
  \let\@tempb\@tempa%
  \fi\@tempb}
\def\eu@DeclareRobustCommand{\@star@or@long\eu@declare@robustcommand}
\def\eu@declare@robustcommand#1{%
  \ifx#1\@undefined\else\ifx#1\relax\else
    \@latex@info{Redefining \string#1}%
  \fi\fi
  \edef\reserved@a{\string#1}%
  \def\reserved@b{#1}%
  \edef\reserved@b{\expandafter\strip@prefix\meaning\reserved@b}%
  \edef#1{%
    \ifx\reserved@a\reserved@b
      \noexpand\x@protect
      \noexpand#1%
    \fi
    \noexpand\protect
    \expandafter\noexpand\csname\expandafter\@gobble\string#1\endcsname}%
  \let\@ifdefinable\@rc@ifdefinable
  \expandafter\eu@new@command\csname\expandafter\@gobble\string#1\endcsname}
\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}]}}
%    \end{macrocode}
%\end{macro}
%
% \subsection{End user commands}
%
%\begin{macro}{\normalvarforms}
% If, after the Greek font is assigned, variant forms retain their original definitions, this command will cause them to be equivalent to the normal forms.
%    \begin{macrocode}
\newcommand\normalvarforms[1][]{\AtBeginDocument{
  \ifx\varbeta\cmvarbeta
    \let\varbeta\beta
  \fi
  \ifx\varepsilon\cmvarepsilon
    \let\varepsilon\epsilon
  \fi
  \ifx\vartheta\cmvartheta
    \let\vartheta\theta
  \fi
  \ifx\varkappa\cmvarkappa
    \let\varkappa\kappa
  \fi
  \ifx\varpi\cmvarpi
    \let\varpi\pi
  \fi
  \ifx\varrho\cmvarrho
    \let\varrho\rho
  \fi
  \ifx\varphi\cmvarphi
    \let\varphi\phi
  \fi
  \ifx\varTheta\cmvarTheta
    \let\varTheta\Theta
  \fi}}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\plaindigits}
% This command is used to easily disable digits redefinitions.
%    \begin{macrocode}
\let\eu@ifnot@plaindigits\@firstofone
\newcommand\plaindigits{\let\eu@ifnot@plaindigits\@gobble}
%    \end{macrocode}
%\end{macro}
%
% The quintessential command. From here, the code branches to four locations.
%\begin{macro}{\setmathsfont}
%    \begin{macrocode}
\providecommand\setmathsfont{\eu@setmathsfont}
\let\setmathfont\setmathsfont
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\+}
% This command inserts a horizontal skip in mathematics. It must be robust and any white space between the control sequence and a next |[| must not be ignored, so that legitimate (square) brackets in mathematics is not interpreted as an optional argument.
%    \begin{macrocode}
\eu@DeclareRobustCommand\+[1][1]{\ensuremath{\mskip#1mu}}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\varforms}
% This command exchanges variant and normal forms for the specified letters.
%    \begin{macrocode}
\newcommand\varforms[1]{\def\eu@if@varforms##1{##1{#1}}}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\setmathrm}
%\begin{macro}{\setmathcal}
%\begin{macro}{\setmathsf}
%\begin{macro}{\setmathtt}
%\begin{macro}{\setmathfrak}
%\begin{macro}{\setmathbb}
% Mathematics alphabet commands.
%    \begin{macrocode}
\ernewcommand\setmathrm[2][]{
  \zf@fontspec{#1}{#2}
  \let\eu@mathrm\zf@family
  \let\eu@ifset@mathrm\@firstofone
  \providecommand\eu@mathbf@shape{n}}
\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}}
\ernewcommand\setmathsf[2][]{
  \zf@fontspec{#1}{#2}
  \let\eu@mathsf\zf@family
  \let\eu@ifset@mathsf\@firstofone}
\ernewcommand\setmathtt[2][]{
  \zf@fontspec{#1}{#2}
  \let\eu@mathtt\zf@family
  \let\eu@ifset@mathtt\@firstofone}
\ernewcommand\setmathfrak[2][]{
  \zf@fontspec{#1}{#2}
  \let\eu@mathfrak\zf@family
  \let\eu@ifset@mathfrak\@firstofone
  \providecommand\eu@mathfrak@series{m}}
\ernewcommand\setmathbb[2][]{
  \zf@fontspec{#1}{#2}
  \let\eu@mathbb\zf@family
  \let\eu@ifset@mathbb\@firstofone
  \providecommand\eu@mathbb@series{m}}
%    \end{macrocode}
%\end{macro}
%\end{macro}
%\end{macro}
%\end{macro}
%\end{macro}
%\end{macro}
%\begin{macro}{\setprimaryfont}
%\begin{macro}{\setsansfonts}
%\begin{macro}{\setmonofonts}
% Shorthands
%    \begin{macrocode}
\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}}
%    \end{macrocode}
%\end{macro}
%\end{macro}
%\end{macro}
%
% \subsection{More internal commands}
%
% \subsubsection{{\ttfamily\string\setmathsfont} branches}
%    \begin{macrocode}
\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}
%    \end{macrocode}
% Special set. This command can be used as a hook to some external code.
%    \begin{macrocode}
\providecommand\eu@ScopeSet@Special[1]{\relax}
%    \end{macrocode}
% Latin set.
%    \begin{macrocode}
\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}
%    \end{macrocode}
% Greek set
%    \begin{macrocode}
\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}
%    \end{macrocode}
% Symbols set. This command actually does not do a lot.
%    \begin{macrocode}
\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}
%    \end{macrocode}
%
% \subsubsection{Exchanging variant and normal forms}
%
%    \begin{macrocode}
\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}
%    \end{macrocode}
%
% \subsection{{\sffamily xkeyval} things}
%
%    \begin{macrocode}
\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}
%    \end{macrocode}
% \subsection{Extending \LaTeX\ commands}
%
%\begin{macro}{\eu@XeTeXDeclareMathSymbol}
% A crude extension of \LaTeX’s |\DeclareMathSymbol| to allow the greater set of Unicode characters. 
%    \begin{macrocode}
\newcommand\eu@XeTeXDeclareMathSymbol[4]{
  \expandafter\XeTeXmathcode`#1\mathchar@type#2\csname sym#3\endcsname#4}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\eu@DeclareMathSymbol}
% This command declares a symbol only if it appears in the font and optionally defines an equivalent control sequence.
%    \begin{macrocode}
\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}
%    \end{macrocode}
%\end{macro}
% A modification of \LaTeX’s |\DeclareMathSymbol| to perform only if the glyph appears in the font.
%    \begin{macrocode}
\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
%    \end{macrocode}

% 
% \subsection{Declarations}
%
% Fonts.
%    \begin{macrocode}
\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}
%    \end{macrocode}
% Digits.
%    \begin{macrocode}
\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}}}
%    \end{macrocode}
% Uppercase Latin.
%    \begin{macrocode}
\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}
%    \end{macrocode}
% Lowercase Latin.
%    \begin{macrocode}
\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}
%    \end{macrocode}
% Uppercase Greek.
%    \begin{macrocode}
\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}
%    \end{macrocode}
% Lowercase Greek.
%    \begin{macrocode}
\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}
%    \end{macrocode}
% Symbols.
%    \begin{macrocode}
\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}
%    \end{macrocode}
% The main work.
%    \begin{macrocode}
\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}
%    \end{macrocode}
% \iffalse
%<*package>
% \fi
% \Finale
% \typeout{*********************************************************}
% \typeout{*}
% \typeout{* To finish the installation you have to move the}
% \typeout{* following file into a directory searched by TeX:}
% \typeout{*}
% \typeout{* \space\space mathspec.sty}
% \typeout{*}
% \typeout{* To produce the documentation run the file mathspec.dtx}
% \typeout{* through XeLaTeX.}
% \typeout{*}
% \typeout{* Happy XeTeXing!}
% \typeout{*********************************************************}
\endinput
