该类ltugboat
与包不兼容,bidi
因此我试图在不使用bidi
或的情况下获得最低限度的阿拉伯语脚本支持polyglossia
。我所需的最低限度是能够使用\beginR
和\endR
基元。但是当我将这些基元与类一起使用时,ltugboat
我收到错误消息:
! Improper \beginR.
<recently read> \beginR
l.102 Hamza&4F&\texttt{h}&\myarabicx{^^^^0626}
\\
! Improper \endR.
\myarabicx ...{\beginR \arabicfont #1\hfill \endR
}
你能告诉我\beginR
和\endR
be 是什么意思吗?不当,以及如何避免此错误?
(XeLaTeX 已使用 eTeX 支持和其他一些类进行编译,这些原语可以正常工作。)
答案1
我认为这里发生的事情不仅仅是ltugboat
MWE 所证明的
\documentclass{article}
\usepackage{fontspec}
\newfontfamily{\arabicfont}{FreeSerif}[Script=Arabic]
\begin{document}
\newcommand{\myarabic}[1]{\beginR\arabicfont #1\endR}
\myarabic{^^^^0626}
\end{document}
我必须深入研究源代码才能发现问题出在哪里,因为你使用的是旧的 TeX-XeT 原语,它们不是默认开启。有一个新的原语\TeXXeTstate
可以将其开启(只需添加\TeXXeTstate=1
到前言中)。
我曾猜测 XeTeX 中对此有一些现代处理方法和不同的首选路线,但深入研究代码bidi
后发现,它们\TeXXeTstate
本身用于 XeTeX 引擎。(还值得注意的是,它们使用了 1987 年 Knuth-MacKay 算法的修改版本,它们在输出时反转字符,而不是像原始代码那样需要特殊的 IVD-DVI 处理。