ヘブライ語ではパッケージのキャンセルが機能しないことがあります

ヘブライ語ではパッケージのキャンセルが機能しないことがあります

私はbabelヘブライ語で文書を書いていて、cancel方程式の項に線を引いて相殺するためにこのパッケージを使っています。今まではうまくいっていました。最近、項を相殺しようとしたら、項の上に線が引かれる代わりに、矢印がたくさん描かれました。

関連するコードは次のとおりです。

\documentclass[a4paper, 12pt]{article}


\PassOptionsToPackage{no-math}{fontspec}

\usepackage[bidi=basic, layout=tabular, headfoot=hebrew]{babel}

% For Hebrew
\babelprovide[main, import, alph=letters, Alph=letters]{hebrew}
\babelprovide[import]{english}

% For English
% \babelprovide[main, import]{english}
% \babelprovide[import, alph=letters, Alph=letters]{hebrew}

\babelfont[hebrew]{rm}{David CLM}
\babelfont[hebrew]{sf}{David CLM}

\usepackage[hyperref, table, x11names]{xcolor}
\usepackage{amsmath}
\usepackage[thicklines]{cancel}

% Cancel settings
\renewcommand{\CancelColor}{\color{red}}

\begin{document}
\[ \cancel{x} + 1 - \cancel{x} = 1 \]
\[ \cancel{
    (\nabla{\psi}^{\ast})
    \cdot
    (\nabla\psi)
} \]
\end{document}

奇妙なのは、画像でわかるように、時々そうなるし、時々は線がきちんと引けるということです。いつうまくいって、いつあの奇妙な矢印が引かれるのか、そのパターンがわかりませんでした。いろいろ試してみた結果、問題はおそらくヘブライ語がメイン言語になっているためだとわかりました。設定を変更してbabel英語をメイン言語にすると、問題はなくなりました。

英語の変更点:

\usepackage[bidi=basic, layout=tabular, headfoot=english]{babel}

% For Hebrew
% \babelprovide[main, import, alph=letters, Alph=letters]{hebrew}
% \babelprovide[import]{english}

% For English
\babelprovide[main, import]{english}
\babelprovide[import, alph=letters, Alph=letters]{hebrew}

この\cancelコマンドがヘブライ語で機能する場合と機能しない場合があるのはなぜか、またこれを修正するにはどうすればよいか、誰か説明してもらえますか?

答え1

私は問題を提起した、グラフィック要素と数式要素は本質的に LTR である (または方向によって変更されるべきではない) ため、多くのコマンドとパッケージにパッチを適用する必要があるため、問題があることはわかっています (幸い、 の場合のluatex方が の場合よりも簡単ですxetex)。このため、マクロが提供されています。このマクロは\babelsublr、多くの場合 (常にではありませんが) 役立ちます。この場合、次の変更により、期待される結果が出力されます。

\[ \babelsublr{ \cancel{
    (\nabla{\psi}^{\ast})
    \cdot
    (\nabla\psi)
} }\]

編集。babelマニュアルに記載されているように、pictureは で環境をサポートすることに注意してくださいpict2e。残念ながら、は環境\cancelを使用せずpicture、代わりに元の動作をエミュレートするため、効果はありません。(後者については、ファイル内に「いつか pict2e ですべての傾斜を使用するより良い解決策が見つかるかもしれません」というpict2eメモもあります)。.tex

答え2

特定の角度の線分の文字は、 の位置に格納されます(。bidi は と をミラーリングするため、(矢印の先端である の位置)に格納された文字が取得されることがあります。)

ミラーリングを無効にすることもできますが、現時点では段落間でのみ実行できるようです。つまり、テキストに影響を与えないように注意する必要があります (2 番目のテキスト行の括弧を参照)。

\documentclass[a4paper, 12pt]{article}

\PassOptionsToPackage{no-math}{fontspec}

\usepackage[bidi=basic, layout=tabular, headfoot=hebrew]{babel}

% For Hebrew
\babelprovide[main, import, alph=letters, Alph=letters]{hebrew}
\babelprovide[import]{english}

% For English
% \babelprovide[main, import]{english}
% \babelprovide[import, alph=letters, Alph=letters]{hebrew}

\babelfont[hebrew]{rm}{David CLM}
\babelfont[hebrew]{sf}{David CLM}

\usepackage[hyperref, table, x11names]{xcolor}
\usepackage{amsmath}
\usepackage[thicklines]{cancel}

% Cancel settings
\renewcommand{\CancelColor}{\color{red}}

\begin{document}

אלף (בית) גימל;

\babeladjust{bidi.mirroring=off}

אלף (בית) גימל;

\[ \cancel{x} + 1 - \cancel{x} = 1 \]
\[ \cancel{
    (\nabla{\psi}^{\ast})
    \cdot
    (\nabla\psi)
} \]
\end{document}

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

答え3

を と一緒に使用するpictureと、 モードが壊れるようです。bidibabel

最小限の例。

\documentclass[a4paper, 12pt]{article}
\PassOptionsToPackage{no-math}{fontspec}
\usepackage[bidi=basic, layout=tabular, headfoot=hebrew]{babel}

% For Hebrew
\babelprovide[main, import, alph=letters, Alph=letters]{hebrew}
\babelprovide[import]{english}

% For English
% \babelprovide[main, import]{english}
% \babelprovide[import, alph=letters, Alph=letters]{hebrew}

\babelfont[hebrew]{rm}{David CLM}
\babelfont[hebrew]{sf}{David CLM}


\begin{document}

XXX\begin{picture}(10,10)
\line(6,1){33}
\end{picture}

\selectlanguage{english}

XXX\begin{picture}(10,10)
\line(6,1){33}
\end{picture}

\end{document}

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

回避策 ( を使用すると、境界ボックスに悪影響が出る可能性があります\cancelto)。

\documentclass[a4paper, 12pt]{article}
\PassOptionsToPackage{no-math}{fontspec}
\usepackage[bidi=basic, layout=tabular, headfoot=hebrew]{babel}
\usepackage[table, x11names]{xcolor}
\usepackage{amsmath}
\usepackage{pict2e}
\let\OriginalPictureCmds\relax
\usepackage[thicklines]{cancel}

% For Hebrew
\babelprovide[main, import, alph=letters, Alph=letters]{hebrew}
\babelprovide[import]{english}

% For English
% \babelprovide[main, import]{english}
% \babelprovide[import, alph=letters, Alph=letters]{hebrew}

\babelfont[hebrew]{rm}{David CLM}
\babelfont[hebrew]{sf}{David CLM}


% Cancel settings
\renewcommand{\CancelColor}{\color{red}}

\begin{document}

\[ \cancel{x} + 1 - \cancel{x+y+z+t} = 1 \]

\[ \cancel{
    (\nabla{\psi}^{\ast})
    \cdot
    (\nabla\psi)
}
\]

\end{document}

cancel基本的には拡張pictureモードが良いとお伝えしています。

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

一方、 を使用する場合は何も必要ありませんbidi=basic-rが、他の副作用が発生する可能性があります。

\documentclass[a4paper, 12pt]{article}
\PassOptionsToPackage{no-math}{fontspec}
\usepackage[bidi=basic-r, layout=tabular, headfoot=hebrew]{babel}
\usepackage[table, x11names]{xcolor}
\usepackage{amsmath}
\usepackage[thicklines]{cancel}

% For Hebrew
\babelprovide[main, import, alph=letters, Alph=letters]{hebrew}
\babelprovide[import]{english}

% For English
% \babelprovide[main, import]{english}
% \babelprovide[import, alph=letters, Alph=letters]{hebrew}

\babelfont[hebrew]{rm}{David CLM}
\babelfont[hebrew]{sf}{David CLM}


% Cancel settings
\renewcommand{\CancelColor}{\color{red}}

\begin{document}

\[
 \cancel{x} + 1 - \cancel{x+y+z+t} = 1 \]

\[ \cancel{
    (\nabla{\psi}^{\ast})
    \cdot
    (\nabla\psi)
}
\]

\end{document}

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

関連情報