似乎我无法在 babel 中为 RTL 语言着色。下面的 (xelatex) 代码将第一行颜色设为黑色,而不是红色:
\documentclass{article}
\setlength{\parindent}{0pt}
\usepackage{xcolor}
\usepackage[bidi=default]{babel}
\babelprovide[import,main]{arabic}
\babelfont{rm}{FreeSerif}
\begin{document}
\begingroup
\color{red}English and $math$ % black
\endgroup
\color{red}English and $math$ % red
\end{document}
唯一的区别就是一个群体。我不明白群体有什么重要性。
相关问题可能是为 RTL 模式 (pdflatex 和 xelatex) 创建适合的 \color 宏但是没有用babel,好像也没有解决。
答案1
xetex 的从右到左机制,称为 TeX--XeT,本质上是作为生成的 dvi 文件的后处理器。(该算法的原始版本 TeX-XeT 是一个后处理器,TeX--XeT 本质上是相同的,但内置于 etex 和 xetex 引擎中。)
这意味着几乎所有的处理都是从左到右进行的,然后在最后阶段,每一行都或多或少地以相反的顺序单独写入 dvi 文件。
与 luatex(源自 Omega)中的方向支持相比,这有几个缺点。值得注意的是:
您不能在段落之间指定从右到左(在垂直模式下)。(这就是为什么在 xetex 中很难有从右到左的长表列。)
如果颜色开始和颜色结束等成对
\special
出现在同一行,则会以错误的顺序写出。
这就是为什么在您的示例中段落在组之前结束(或没有组)会使颜色起作用:颜色开始在一行上,颜色结束在后面的一行,因此即使每行都被反转,开始也在结束之前。
如果颜色命令知道颜色将在同一行结束,并且它是一个 rtl 区域,它可能会以错误的顺序写出特殊内容,因此 TeX--XeT 会反转它们使它们正确,但是一般来说如果它以错误的顺序写入它们但是有一个换行符,颜色结束将再次出现在颜色开始之前的 dvi 中。
这是一个标记为社区维基的非答案,如果有人有更连贯的内容要添加,请随时编辑......
来自蝉:
正如代码所示,该文档的主要语言定义为阿拉伯语,因此即使是英文文本(或任何其他文本)也会按照 RTL 顺序显示。
在 RTL 环境中,将\color
命令令牌放在最前面(=在正确的),所以它排在第一位。
但更好的是,为什么不使用 babel 的\selectlanguage{}
命令来切换语言?
平均能量损失
\documentclass{article}
\setlength{\parindent}{0pt}
\usepackage{xcolor}
\usepackage[bidi=default]{babel}
\babelprovide[import,main]{arabic}
\babelfont{rm}{FreeSerif}
\begin{document}
\begingroup
English and $math$ -- this is blue\color{blue} % black
\endgroup
\color{red}English and $math$ -- this is red % red
هذا أحمر أم أزرق؟
\selectlanguage{english}
hadha 'ahmar 'am 'azaraq?
\begingroup
\color{blue} English and $math$ -- this is blue (in front, in English)% black
\endgroup
\color{red}English and $math$ -- this is red % red
\end{document}
答案2
你可以随时使用彩色用于 bidi 文本。它与 [bidi] 是由同一个开发人员开发的,解决了 TeX--XeT 中的颜色问题(它基本上将颜色作为字体功能而不是特殊功能来处理)。
\documentclass{article}
\setlength{\parindent}{0pt}
\usepackage{xcolor}
\usepackage[bidi=default]{babel}
\babelprovide[import,main]{arabic}
\babelfont{rm}{FreeSerif}
\begin{document}
\begingroup
\xecolor{red}English and $math$ % black
\endgroup
\xecolor{red}English and $math$ % red
\end{document}