ヘブライ語の\colorbox

ヘブライ語の\colorbox

\colorbox(または framed の などの派生)をヘブライ語および pdflatex で使用するとshadedbox、カラー スタックが混乱するようです。

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}

次のような結果が出た

ここに画像の説明を入力してください

関連情報