如何用非拉丁语言的数字来书写方程式的数字?

如何用非拉丁语言的数字来书写方程式的数字?

我正在使用 排版一份波斯语文档polyglossia。借助fontspecXeLaTeX,我可以在文本中复制/粘贴波斯数字,但当我对方程式执行相同操作时,编译不会为粘贴的波斯数字呈现任何内容。我尝试使用mathspec,例如\setmathsfont(Digits){XB Niloofar},但它没有任何变化。

\documentclass{article}

\usepackage{amsmath}
\usepackage{mathspec}
\usepackage{fontspec}
\usepackage{polyglossia}

\setdefaultlanguage[numerals=eastern]{persian}
\newfontfamily\persianfont[Script=Arabic]{XB Niloofar}

\setmathsfont(Digits){XB Niloofar}

\begin{document}
    \begin{equation}
        E = mc^۲
    \end{equation}      
\end{document}

\localnumeral{2}并且\farsidigits{2}在数学模式下什么也没做。

我怎样才能۲在上述等式中得到该数字(相当于波斯数字 2)?

答案1

在 LuaLaTeX 中,您可以使用 (deprecated)Numbers=Arabic选项。这会给您关于字体不具备该功能的虚假警告,但实际上它已实现luaotfload并且可以正常工作。

由于 XeTeX 不支持它,并且mathspec需要 XeTeX,所以在这里我切换到unicode-math使用 TeX 分发的免费字体:

\documentclass{article}
\tracinglostchars=2
\usepackage{unicode-math}
\usepackage{polyglossia}
\usepackage{newunicodechar}

\defaultfontfeatures{ Scale=MatchLowercase,
                      Ligatures=TeX,
                      Renderer=HarfBuzz }

\setdefaultlanguage{persian}
\setmainfont{Libertinus Serif}[Scale=1.0]
\setsansfont{Libertinus Sans}
\setmonofont{Libertinus Mono}
\newfontfamily\persianfont{Amiri}[
  Language=Farsi,
  Script=Arabic,
  Numbers=Arabic ]
% Define \persianfontsf here, if needed
\setfontfamily\persianfonttt{ALM Fixed}[
  Language=Farsi,
  Script=Arabic,
  Numbers=Arabic ]
\setmathfont{Libertinus Math}
\setmathfont{Amiri-Regular}[
  range=up/num,
  Language=Farsi,
  Script=Arabic,
  Numbers=Arabic ]
\setmathfont{Amiri-Bold}[
  range=bfup/num,
  Language=Farsi,
  Script=Arabic,
  Numbers=Arabic ]

\newunicodechar{۱}{1}
\newunicodechar{۲}{2}
% Etc.

\begin{document}
    \begin{align}
        E &= m\symup{c}^2 \\
        E &= m\symup{c}^۲
    \end{align}      
\end{document}

Amiri/Libertinus 数学样本

您需要\newunicodechar{۱}在多语言文档中使用更复杂的定义等。(例如\newunicodechar{۲}{\ifmmode\mathalpha{\textnormal{\textpersian{۲}}}\else\textpersian{۲}\fi})如果您想要不同形式的数字,请使用其他字体或样式集。

如果您想继续使用 XeLaTeX,您可以尝试Mapping=farsidigitsNumbers=Arabic如果您想使用旧字体中的数学符号,但使用 OpenType 字体中的字母和数字,您可以将其替换mathspecmathfont,这在 LuaLaTeX 中有效。

答案2

这似乎\text{\localnumeral{<digit>}}是一条路。所以,

\begin{equation}
    E = mc^{\text{\localnumeral{2}}}
\end{equation}

产量

在此处输入图片描述

相关内容