arabxetex 中的数学上标和下标问题

arabxetex 中的数学上标和下标问题

我想在阿拉伯语环境中使用数学上标^,而不是数学公式\sparabxetex。不幸的是,它不起作用,请参见下面的示例。有办法解决这个问题吗?对于_和,同样如此\sb

\documentclass{article}
\usepackage{arabxetex}

\begin{document}

$a^2$ 
$a\sp{2}$
$a\sb{2}$

\begin{farsi}
$a^2$
$a\sp{2}$
$a\sb{2}$
\end{farsi}

\end{document}

答案1

参见手册第 3.2.1 节:

3.2.1 哈姆扎的语境分析
与 ArabTeX 一样,对输入编码进行上下文分析(在字体映射级别)以自动确定 hamza 的载体,如以下示例所示:

\begin{arab}
'amruN, 'ibiluN, 'u_htuN, '"u_ht"uN, '"Uql"Id"Is, ra'suN, 'ar'asu,
sa'ala, qara'a, bu'suN, 'ab'usuN, ra'ufa, ru'asA'u, bi'ruN, 'as'ilaTuN,
ka'iba, qA'imuN, ri'AsaTuN, su'ila, samA'uN, barI'uN, sU'uN, bad'uN,
^say'uN, ^say'iN, ^say'aN, sA'ala, mas'alaTuN, saw'aTuN, _ha.tI'aTuN,
...

因此,^和在、或环境_中对于数学模式失去了意义。arabfarsiurdu

您可以激活^_数学;它们的行为将是音译文本中所需的行为,在数学模式下返回到通常的行为。代码

\begingroup\lccode`~=`^ \lowercase{\endgroup\let~}\sp
\begingroup\lccode`~=`_ \lowercase{\endgroup\let~}\sb
\AtBeginDocument{\mathcode`^=\string"8000 \mathcode`_=\string"8000 }

就是你所需要的。这是一个完整的示例。

\documentclass{article}
\usepackage{arabxetex}

\begingroup\lccode`~=`^ \lowercase{\endgroup\let~}\sp
\begingroup\lccode`~=`_ \lowercase{\endgroup\let~}\sb
\AtBeginDocument{\mathcode`^=\string"8000 \mathcode`_=\string"8000 }

\begin{document}

\begin{farsi}
\relax ^say'uN _ha.tI'aTuN

$a^2$
$a\sp{2}$
$a\sb{2}$
\end{farsi}

\end{document}

在此处输入图片描述

\relax如果^_是第一个字符,则需要。

一个更好的实现,修复了数学模式下控制序列的一些问题,如下所示

\documentclass{article}
\usepackage{arabxetex}

% define ^ and _ to do the right thing in math mode
\begingroup\lccode`~=`^ \lowercase{\endgroup\let~}\sp
\begingroup\lccode`~=`_ \lowercase{\endgroup\let~}\sb
\AtBeginDocument{\mathcode`^=\string"8000 \mathcode`_=\string"8000 }
\makeatletter
% redefine the codes used in the environments for Arab script
\def\arabtex@codes{%
  \catcode`^=12 \lccode`^=`^
  \catcode`_=12 \lccode`_=`_
}
\makeatother


\begin{document}

\begin{farsi}
\relax ^say'uN _ha.tI'aTuN

$a^2$ $\tau_2$
$a\sp{2}$
$a\sb{2}$
\end{farsi}

\end{document}

您应该让维护人员了解这个更好的定义\arabtex@codes。只要\lccode非零,类别代码为 11 或 12 的字符在连字时是等效的。

相关内容