Unicode 字符的数学模式中出现错误字符代码

Unicode 字符的数学模式中出现错误字符代码

我使用了 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}

在此处输入图片描述

答案2

代码在TexLive2020下的Lualatex中编译成功。

输出应该是什么样的?

阿拉伯数学

相关内容