\colorbox 希伯来语

\colorbox 希伯来语

当将 a \colorbox(或诸如 framed 之类的衍生词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}

产生以下结果

在此处输入图片描述

相关内容