XeTeX/mathspec,多种数学数字字体

XeTeX/mathspec,多种数学数字字体

使用 mathspec 包时,是否可以在同一文档的不同位置拥有多种数学数字字体。

大多数情况下,我希望我的数学数字的字体与我的主要文本字体相同,但在某些地方,我在数学环境中使用东方阿拉伯数字,所以我希望能够切换到具有这些 un​​icode 字符的字体。 (是的,我可以选择一种将这些定义为我的主要文本字体的字体,但这不是目前的最佳解决方案。)

这是一个最简单的例子,它有助于解释我正在尝试做的事情。

\documentclass[a4paper,12pt]{article}
\usepackage[MnSymbol]{mathspec}

\setmainfont[Mapping=tex-text]{Junicode}

\setmathsfont(Digits){Junicode} % XITS Math
\setmathsfont(Symbols){XITS Math}
\setmathsfont(Latin){Junicode}
\setmathrm{Junicode}

\def\offsetdigits#1{%
\xoffset{#1}0%
\xoffset{#1}1%
\xoffset{#1}2%
\xoffset{#1}3%
\xoffset{#1}4%
\xoffset{#1}5%
\xoffset{#1}6%
\xoffset{#1}7%
\xoffset{#1}8%
\xoffset{#1}9}
\def\xoffset#1#2{%
\XeTeXmathcodenum`#2=\numexpr\XeTeXmathcodenum`#2-`0+#1\relax}


\begin{document}

I want the digits in my math environment to be the same as those in my text, 
for example, 44{\textdegree} and $\frac{\pi}{\sin 44 \text{\textdegree}}$.

But at other points in the document, I want to be able to switch to a different 
font so that I can have some Eastern Arabic digits in the math environment; for 
example {\offsetdigits{"0660}$\frac{2}{5}$}. The numbers in this fraction will 
only appear if we switch Junicode with XITS Math in the \verb|\setmathsfont(Digits)
{Junicode}| line in the preamble. 

\end{document} 

答案1

由于preamble-onlyLaTeX 中存在许多常规限制(1),并且mathspec也不例外(2),因此不能\setmathsfont{Digits}{xits-math.otf}在文档主体中的所需位置直接执行自然操作。

(1)例如,文件 r 中的代码行 583:ltfssdcl.dtx 日期:2011/05/08 LaTeX2e 源代码版本 v3.0n:\@onlypreamble\DeclareMathSymbol

(2)它也包含许多 \@onlypreamble,诚然,就当前的情况而言,那些已经在 LaTeX 内核中的代码是实现快的当地的解决方案。

mathspec没有数学版本的界面,因此需要进行一些黑客攻击。

\documentclass[a4paper,12pt]{article}
\usepackage[MnSymbol]{mathspec}

\setmainfont[Mapping=tex-text]{Junicode}

\makeatletter
\setmathsfont(Digits){xits-math.otf}     % temporary declaration
\edef\SavedFontName{\eu@Digitsmathsfont}
\makeatother

\setmathsfont(Digits){Junicode} 
\setmathsfont(Symbols){XITS Math}
\setmathsfont(Latin){Junicode}
\setmathrm{Junicode}

%%% \setmathsfont(Digits){Baskerville}   % testing at home 
%%% \setmathsfont(Symbols){xits-math.otf}

\makeatletter
\DeclareMathVersion{XITSdigits}
\SetSymbolFont{\eu@DigitsArabic@symfont}
        {XITSdigits} {EU1} {\SavedFontName} {m} {n}
\makeatother

\def\offsetdigits#1{%
\xoffset{#1}0%
\xoffset{#1}1%
\xoffset{#1}2%
\xoffset{#1}3%
\xoffset{#1}4%
\xoffset{#1}5%
\xoffset{#1}6%
\xoffset{#1}7%
\xoffset{#1}8%
\xoffset{#1}9}
\def\xoffset#1#2{%
\XeTeXmathcodenum`#2=\numexpr\XeTeXmathcodenum`#2-`0+#1\relax}

\begin{document}

I want the digits in my math environment to be the same as those in my text, 
for example, 44{\textdegree} and $\frac{\pi}{\sin 44 \text{\textdegree}}$.


\mathversion{XITSdigits}

But at other points in the document, I want to be able to switch to a different 
font so that I can have some Eastern Arabic digits in the math environment; for 
example {\offsetdigits{"0660}$\frac{2}{5}$}. The numbers in this fraction will 
only appear if we switch Junicode with XITS Math in the 
\verb|\setmathsfont(Digits){Junicode}| line in the preamble. 

\end{document} 

相关内容