我使用了 Cicada 用户提供的以下解决方案问题关于如何在数学模式下输入 Unicode 字符:
\documentclass{article}
\usepackage{amsmath,amssymb}
\usepackage{polyglossia}
\setmainlanguage{arabic}
% Credits: Cicada's answer from https://bit.ly/3dpDg9t
\setmainfont[Script=Arabic]{Amiri}
\DeclareSymbolFont{arabicletters}{\encodingdefault}{Amiri(0)}{m}{n}
\newcommand{\makearabicmathletter}[1]{%
\begingroup\lccode`a=#1\lowercase{\endgroup
\Umathcode`a}="0 \csname symarabicletters\endcsname\space #1
}
% Normal Arabic Letters
\count255="0605
\loop\ifnum\count255<"064B
\makearabicmathletter{\count255}
\advance\count255 by 1
\repeat
% Arabic Mathematical Symbols!!!!!!
\count255="1EE00
\loop\ifnum\count255<"1EEBB
\makearabicmathletter{\count255}
\advance\count255 by 1
\repeat
\begin{document}
\[
\frac{م}{2؈} = ط
\]
\[\char126555 + م\]
\end{document}
第一个循环似乎运行良好。我可以直接输入阿拉伯字母。但是,由于后一个循环处理的是普通键盘上不存在的字形,所以我使用它们的唯一机会是直接输入字符代码。然而它给了我一个错误:
! Bad character code (126555).
l.27 \char126555
Overleaf 甚至告诉我不能使用任何大于 65535 的字符数。我该怎么办?为什么当 Cicada 使用埃及象形文字时它能工作,而现在却不行?
编辑:值得赞扬的是,用户 egreg 发现了这个lccode
技巧。
答案1
显然,XeTeX 不喜欢\char
数学模式。您可以\Umathchar
改为使用隐藏在宏中的功能,以方便使用。
\documentclass{article}
\usepackage{amsmath,amssymb}
\usepackage{polyglossia}
\setmainlanguage{arabic}
% Credits: Cicada's answer from https://bit.ly/3dpDg9t
\setmainfont[Script=Arabic]{Amiri}
\DeclareSymbolFont{arabicletters}{\encodingdefault}{Amiri(0)}{m}{n}
\newcommand{\makearabicmathletter}[1]{%
\begingroup\lccode`a=#1\lowercase{\endgroup
\Umathcode`a}="0 \symarabicletters\space #1\relax
}
% Normal Arabic Letters
\count255="0605
\loop\ifnum\count255<"064B
\makearabicmathletter{\count255}
\advance\count255 by 1
\repeat
% Arabic Mathematical Symbols!!!!!!
\count255="1EE00
\loop\ifnum\count255<"1EEBB
\makearabicmathletter{\count255}
\advance\count255 by 1
\repeat
\newcommand{\achar}[1]{\Umathchar"0 \symarabicletters#1\relax}
\begin{document}
\[
\frac{م}{2؈} = ط
\]
\[\achar{126555} + م\]
\end{document}