I know that in TeX, you can only use 16 math alphabets but XeTeX extends this so I was curious to enlarge the number of my math alphabets and I had to redefine some internals of LaTeX. Here is my minimal working example:
\documentclass{article}
\DeclareSymbolFont{AMSa}{U}{msa}{m}{n}
\DeclareSymbolFont{AMSb}{U}{msb}{m}{n}
\DeclareSymbolFont{MnSyA} {U} {MnSymbolA}{m}{n}
\DeclareSymbolFont{MnSyB} {U} {MnSymbolB}{m}{n}
\DeclareSymbolFont{MnSyC} {U} {MnSymbolC}{m}{n}
\DeclareSymbolFont{MnSyD} {U} {MnSymbolD}{m}{n}
\DeclareSymbolFont{MnSyE} {U} {MnSymbolD}{m}{n}
\makeatletter
\def\select@group#1#2#3#4{%
\ifx\math@bgroup\bgroup\else\relax\expandafter\@firstofone\fi
{%
\ifmmode
\ifnum\csname c@mv@\math@version\endcsname<\@cclvi
\begingroup
\escapechar\m@ne
\getanddefine@fonts{\csname c@mv@\math@version\endcsname}#3%
\globaldefs\@ne \math@fonts
\endgroup
\init@restore@version
\xdef#1{\noexpand\use@mathgroup\noexpand#2%
{\number\csname c@mv@\math@version\endcsname}}%
\global\advance\csname c@mv@\math@version\endcsname\@ne
\else
\let#1\relax
\@latex@error{Too many math alphabets used in
version \math@version}%
\@eha
\fi
\else \expandafter\non@alpherr\fi
#1{#4}%
}%
}
\def\document@select@group#1#2#3#4{%
\ifx\math@bgroup\bgroup\else\relax\expandafter\@firstofone\fi
{%
\ifmmode
\ifnum\csname c@mv@\math@version\endcsname<\@cclvi
\begingroup
\escapechar\m@ne
\getanddefine@fonts{\csname c@mv@\math@version\endcsname}#3%
\globaldefs\@ne \math@fonts
\endgroup
\expandafter\extract@alph@from@version
\csname mv@\math@version\expandafter\endcsname
\expandafter{\number\csname
c@mv@\math@version\endcsname}%
#1%
\global\advance\csname c@mv@\math@version\endcsname\@ne
\else
\let#1\relax
\@latex@error{Too many math alphabets used
in version \math@version}%
\@eha
\fi
\else \expandafter\non@alpherr\fi
#1{#4}%
}%
}
\makeatother
\DeclareSymbolFont{testa} {U}{cmr10} {m}{n}
\DeclareSymbolFont{testb}{U}{cmr10}{bx}{n}
\DeclareSymbolFont{testc}{U}{cmr10}{m}{it}
\DeclareSymbolFont{testd}{U}{cmr10}{m}{n}
\DeclareSymbolFont{lettersA}{U}{txmia}{m}{it}
\begin{document}
\[ \mathtt{Test}\]
\end{document}
But this makes the word test
to appear in italic. You can delete any of the \DeclareSymbolFont
and then \mathtt
worked as expected. This shows that this only happens when the number of math alphabets exceeds 16. Why does this happen and how should one fix this?
Update1: I tried the same thing with LuaTeX and I got expected result so it seems that something is wrong with XeTeX.
Update2: Another minimal working example:
\documentclass{article}
\usepackage{amsfonts}
\usepackage{MnSymbol}
\makeatletter
\def\select@group#1#2#3#4{%
\ifx\math@bgroup\bgroup\else\relax\expandafter\@firstofone\fi
{%
\ifmmode
\ifnum\csname c@mv@\math@version\endcsname<\@cclvi
\begingroup
\escapechar\m@ne
\getanddefine@fonts{\csname c@mv@\math@version\endcsname}#3%
\globaldefs\@ne \math@fonts
\endgroup
\init@restore@version
\xdef#1{\noexpand\use@mathgroup\noexpand#2%
{\number\csname c@mv@\math@version\endcsname}}%
\global\advance\csname c@mv@\math@version\endcsname\@ne
\else
\let#1\relax
\@latex@error{Too many math alphabets used in
version \math@version}%
\@eha
\fi
\else \expandafter\non@alpherr\fi
#1{#4}%
}%
}
\def\document@select@group#1#2#3#4{%
\ifx\math@bgroup\bgroup\else\relax\expandafter\@firstofone\fi
{%
\ifmmode
\ifnum\csname c@mv@\math@version\endcsname<\@cclvi
\begingroup
\escapechar\m@ne
\getanddefine@fonts{\csname c@mv@\math@version\endcsname}#3%
\globaldefs\@ne \math@fonts
\endgroup
\expandafter\extract@alph@from@version
\csname mv@\math@version\expandafter\endcsname
\expandafter{\number\csname
c@mv@\math@version\endcsname}%
#1%
\global\advance\csname c@mv@\math@version\endcsname\@ne
\else
\let#1\relax
\@latex@error{Too many math alphabets used
in version \math@version}%
\@eha
\fi
\else \expandafter\non@alpherr\fi
#1{#4}%
}%
}
\makeatother
\DeclareSymbolFont{testa}{U}{txmia}{m}{it}
\DeclareSymbolFont{testb}{U}{txmia}{m}{it}
\DeclareSymbolFont{testc}{U}{txmia}{m}{it}
\DeclareSymbolFont{testd}{U}{txmia}{m}{it}
\DeclareSymbolFont{lettersA}{U}{txmia}{m}{it}
\begin{document}
\[ \mathtt{Test} \mathcal{L}\]
\end{document}
No problem with LuaLaTeX, but with XeLaTeX, this time, \mathtt
is fine but you get italic with \mathcal
.
\showthe\textfont16
after the formula produces aBad number (16)
error with XeLaTeX and\OMS/MnSymbolS/m/n/10
with LuaLaTeX, so this seems like a bug in XeTeX.