我正在使用 排版一份波斯语文档polyglossia
。借助fontspec
XeLaTeX,我可以在文本中复制/粘贴波斯数字,但当我对方程式执行相同操作时,编译不会为粘贴的波斯数字呈现任何内容。我尝试使用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}
您需要\newunicodechar{۱}
在多语言文档中使用更复杂的定义等。(例如\newunicodechar{۲}{\ifmmode\mathalpha{\textnormal{\textpersian{۲}}}\else\textpersian{۲}\fi}
)如果您想要不同形式的数字,请使用其他字体或样式集。
如果您想继续使用 XeLaTeX,您可以尝试Mapping=farsidigits
。Numbers=Arabic
如果您想使用旧字体中的数学符号,但使用 OpenType 字体中的字母和数字,您可以将其替换mathspec
为mathfont
,这在 LuaLaTeX 中有效。