错误:RTL 模式下 pdflatex 的颜色

错误:RTL 模式下 pdflatex 的颜色

我在从右到左的彩色文本中遇到了这个问题。

\documentclass[12pt]{article}
\usepackage{color}
\usepackage[utf8]{inputenc}
\usepackage[LAE]{fontenc}
\usepackage[arabic]{babel}
\begin{document}
$normal$ \textcolor{blue}{$blue$} $more$
\end{document}

这是一个老 Bug,目前已知一种解决方法

\documentclass[12pt]{article}
\usepackage{color}
\usepackage[utf8]{inputenc}
\usepackage[LAE]{fontenc}
\usepackage[arabic]{babel}
\newcommand{\Artextcolor}[2]{\textLR{\textcolor{#1}{\AR{#2}}}}
\begin{document}
$normal$ \Artextcolor{blue}{$blue$} $more$
\end{document}

但如果彩色文本到达换行符,这无济于事

\documentclass[12pt]{article}
\usepackage{color}
\usepackage[width=6cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[LAE]{fontenc}
\usepackage[arabic]{babel}
\newcommand{\Artextcolor}[2]{\textLR{\textcolor{#1}{\AR{#2}}}}
\begin{document}
$normal$ %this should be black
\Artextcolor{blue}{$blue$  $just$ $a$ $long$ $text$ $to$ $show$ $the$ $problem$}
$more$ %this should be black
\end{document}

对于带有 xecolor 包的 xelatex,问题似乎已得到部分解决。对于 pdflatex 有解决方案吗?

答案1

pdftex 正在尝试使用一堆颜色,这些颜色被推送然后弹出以恢复原始颜色

颜色包试图在组的末尾插入一个颜色流行元素

tex--xet 重新排列节点列表,意味着这两个过程都没有任何帮助。

真正的修复需要对 pdftex 进行深度更改,因此更简单的修复是首先简化命令,\color以便它仅在该点设置全局颜色,而不使用 pdftex 颜色堆栈或在组末尾插入恢复。

然后您“只”需在 tex-xet 重新排列每行节点的顺序后,在最终位于正确位置的点插入颜色变化。

在此处输入图片描述

\documentclass[12pt]{article}
\usepackage{color}
\makeatletter
\def\set@color{%
  \pdfliteral{\current@color}%
  }
\usepackage[width=6cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[LAE]{fontenc}
\usepackage[arabic]{babel}
\newcommand{\Artextcolor}[2]{\AR{#2\color{#1}}}
\begin{document}
\color{blue}$normal$ \color{black}%this should be black
\Artextcolor{blue}{$blue$  $just$ $a$ $long$ $text$ $to$ $show$ $the$ $problem$}
$more$ %this should be black
\end{document}

相关内容