编译时
\documentclass{article}
\usepackage[utf8x]{inputenc}
\usepackage[hebrew,english]{babel}
\usepackage{xcolor}
\begin{document}
\sethebrew
ראשונה
\color{red} שניה \color{black}
שלישית
\end{document}
我得到以下输出
而不是中间的单词是红色。
有办法解决吗?
答案1
事情的经过如下(请注意,这只是一个粗略的描述):
本质上,行是按从左到右的顺序排列的,您输入的内容会重新排序,以便正确显示。那么,pdfLaTeX 会从左到右看到行中的哪些内容呢?
- 第三个词-שלישית
- 命令
\color{black}
- 第二个词-שניה
- 命令
\color{red}
- 第一个词-ראשונה
命令\color
从这里开始改变颜色,并且两者都不xcolor
知道babel
需要按从右到左(即反向)的顺序应用它。因此,该行以黑色开始,命令\color{black}
不执行任何操作,并且命令\color{red}
影响紧随其后的单词 - 即从左到右取的最后一个单词,但从右到左取的第一个单词。
如果您使用\textcolor{red}{text to be made red}
,则可以避免方向反转混淆,因为红色将准确地应用于命令的第二个参数\textcolor
,而不会应用于其他任何参数。
奖金谜语: 当你编译以下内容时会发生什么?
\documentclass{article}
\usepackage[utf8x]{inputenc}
\usepackage[hebrew,english]{babel}
\usepackage{xcolor}
\begin{document}
\sethebrew
ראשונה
\color{red} שניה \color{green}
שלישית
\end{document}
答案2
有关详细说明,请参阅这个帖子在 xetex 邮件列表上。e-tex 的作者已经意识到了这个问题,我希望 TeXLive 2014 能修复这个问题。
尽管存在这个引擎错误,但bidi
软件包补丁color
和xcolor
软件包。因此bidi
两者都\color
可以\textcolor
部分正常工作(即,如果彩色文本不超过一行):
\documentclass{article}
\usepackage{xcolor}
\usepackage{bidi}
\setRTL
\begin{document}
This is \textcolor{red}{red colour} as you can see.
This is {\color{red} red colour} as you can see.
\end{document}