我想在阿拉伯语环境中使用数学上标^
,而不是数学公式\sp
arabxetex
。不幸的是,它不起作用,请参见下面的示例。有办法解决这个问题吗?对于_
和,同样如此\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, ...
因此,^
和在、或环境_
中对于数学模式失去了意义。arab
farsi
urdu
您可以激活^
和_
数学;它们的行为将是音译文本中所需的行为,在数学模式下返回到通常的行为。代码
\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 的字符在连字时是等效的。