При использовании a \colorbox
(или производных, таких как framed's shadedbox
) с ивритом и pdflatex, цветовой стек, похоже, путается:
предупреждение pdfTeX: pdflatex: вывести пустой стек цветных страниц 0
и вывод неправильный (черный цвет фона).
Есть ли способ обойти эту проблему? (Я знаю, что XeTeX/bidi работает, но я хочу узнать, есть ли какой-нибудь способ в [pdf]latex)
\documentclass{article}
\usepackage{color}
\definecolor{shadecolor}{rgb}{1, 0, 0}
\usepackage[hebrew]{babel}
\begin{document}
\colorbox{shadecolor}{test}
\end{document}
решение1
Отвечая на свой собственный вопрос: похоже, что обертывание в \beginL...\endL
работает:
\documentclass{article}
\usepackage{color}
\definecolor{shadecolor}{rgb}{1, 0, 0}
\usepackage[hebrew]{babel}
\begin{document}
\beginL\colorbox{shadecolor}{test}\endL
\end{document}
Текст на иврите в поле AFAICS сохраняет правильное направление.
решение2
Я попробовал ваше решение, и, похоже, текст на иврите перевернут таким образом. Думаю, вам нужно заключить текст в \beginR
, \endR
. Например, следующий код даст:
\documentclass{article}
\usepackage{color}
\definecolor{shadecolor}{rgb}{1, 0, 0}
\usepackage[hebrew]{babel}
\begin{document}
\beginL\colorbox{shadecolor}{שלום}\endL
\beginL\colorbox{shadecolor}{\beginR שלום\endR}\endL
\end{document}
Вот способ исправить это, без необходимости добавлять \beginL
, \beginR
и т. д. вручную (и это также исправит fcolorbox
):
\documentclass{article}
\usepackage{color}
\definecolor{shadecolor}{rgb}{1, 0, 0}
\usepackage[hebrew]{babel}
\makeatletter
\long\def\color@b@x#1#2#3{%
\leavevmode\if@rl\beginL\fi
\setbox\z@\hbox{\kern\fboxsep{\set@color\if@rl\beginR\fi #3\if@rl\endR\fi}\kern\fboxsep}%
\dimen@\ht\z@\advance\dimen@\fboxsep\ht\z@\dimen@
\dimen@\dp\z@\advance\dimen@\fboxsep\dp\z@\dimen@
{#1{#2\color@block{\wd\z@}{\ht\z@}{\dp\z@}%
\box\z@}}\if@rl\endL\fi}
\makeatother
\begin{document}
\colorbox{shadecolor}{שלום}
\selectlanguage{english}
\colorbox{shadecolor}{Hello}
\end{document}
Которые производят следующее