我在从右到左的彩色文本中遇到了这个问题。
\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}