使用 mathspec 包时,是否可以在同一文档的不同位置拥有多种数学数字字体。
大多数情况下,我希望我的数学数字的字体与我的主要文本字体相同,但在某些地方,我在数学环境中使用东方阿拉伯数字,所以我希望能够切换到具有这些 unicode 字符的字体。 (是的,我可以选择一种将这些定义为我的主要文本字体的字体,但这不是目前的最佳解决方案。)
这是一个最简单的例子,它有助于解释我正在尝试做的事情。
\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-only
LaTeX 中存在许多常规限制(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}