这是对这些问题的补充:
我的目标是创建一个\color
可以在 RTL 模式(从右到左)下使用的宏,并且可以在任何情况下为文本着色并绘制内容而不会出现问题:
这是我的尝试(使用 fontspecColor
键为文本着色,并\color
使用普通颜色规则和绘图,但这需要修补每个绘图内容,如\rule
,,tikzpicture
......)
\documentclass{article}
\usepackage{xcolor}
\usepackage{fontspec}
\setmainfont{Amiri}
\usepackage[rldocument]{bidi}
\makeatletter
% patch \rule commmand
\let\old@rule\@rule
\def\@rule[#1]#2#3{\ifrtlcolor\textcolor{rtlcolor}{\old@rule[#1]{#2}
{#3}}\else\old@rule[#1]{#2}{#3}\fi}
\makeatother
\def\rtlcolor#1{%
\rtlcolortrue
\colorlet{rtlcolor}{#1}
\addfontfeature{Color=#1}
}
\begin{document}
Right to left text {\rtlcolor{red} RED TEXT \rule{5pt}{5pt} right to left text
right to left text right to left text right to left text right to left text } out of group
\end{document}
答案1
插图:
带luacolor
包装,颜色正常:
特定字母范围的代码来自:如何在不失去连接的情况下为阿拉伯字符串中的特定字符着色?
平均能量损失
\documentclass{article}
\usepackage{xcolor}% for (some) names
\usepackage{luacolor}
\newcounter{pft}
%\tracinglostchars=2
\usepackage{polyglossia}
\setotherlanguage{arabic}
\setotherlanguage{english}
\setmainfont{Amiri}
\newfontfamily\arabicfont[Script=Arabic,Scale=1.1,Renderer=HarfBuzz]{Noto Naskh Arabic}%{Amiri}
\begin{document}
\makeatletter
\def\pft#1-#2;{\edef\lower@pft{\the\numexpr#1-1}\edef\upper@pft{\the\numexpr#2+1}}%
\def\ColorRgChar#1#2{\pft#1;%
\setcounter{pft}{0}%
\@tfor\next:=#2\do{\stepcounter{pft}%
\ifnum\value{pft}>\lower@pft
\ifnum\value{pft}<\upper@pft
\textcolor{red}{\next}%
\else
\next
\fi
\else
\next
\fi
}}%
\makeatother
\Huge
\selectlanguage{arabic}
\ColorRgChar{11-13}{المجموعة الشمسية}
\par\selectlanguage{english} blue
\color{blue}\selectlanguage{arabic}\par
المجموعة الشمسية
\par\selectlanguage{english} brown\color{brown}\selectlanguage{arabic}\par
المجموعة الشمسية
\par\selectlanguage{english} violet\color{violet}\selectlanguage{arabic}\par
المجموعة
\par\selectlanguage{english} green\color{green}\selectlanguage{arabic}\par
الشمسية
\end{document}