以下最小示例产生了所需的结果:
\documentclass{article}
\usepackage[usenames]{color}
\begin{document}
black {\color{red} red} black
black
\end{document}
但是下面的例子,除了它是 RTL 之外,其他都是一样的,并没有产生预期的结果:
\documentclass{article}
\usepackage[usenames]{color}
\usepackage{polyglossia}
\setmainlanguage{hebrew}
\def \hebrewFont{David CLM}
\setmainfont[Mapping=tex-text]{\hebrewFont}
\newfontfamily{\hebrewfont}{\hebrewFont}
\begin{document}
black {\color{red} red} black
black
\end{document}
是我做错了什么吗,还是这只是一个简单的错误?
答案1
这是 XeTeX 继承的一个已知 e-TeX 错误(该bidi
软件包的较新版本在某些有限的情况下尝试解决这个问题,但这并不是真正可以用宏代码修复的问题)。
基本上,e-TeX 使用的 TeX-XeT 双向 TeX 扩展在 RTL 模式下反转 TeX 的内部节点列表,以便从右到左排版。这在大多数情况下都很好,但当\special
使用成对的 s 时就会中断,例如 color 内部由一对 和 表示\special{color: push …}
,\special{color pop}
因为这种反转会导致pop
出现特殊的前push
导致已观察到的问题的原因之一。
XeTeX 的下一个版本 (0.99992) 尝试修复该问题的根源,但该代码是实验性的,可能最终会出现在发布的版本中,也可能不会。