Пакет отмены иногда не работает на иврите

Пакет отмены иногда не работает на иврите

Я 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не имеет никакого эффекта. (В файле даже есть примечание .texо последнем: «Когда-нибудь, возможно, найдется лучшее решение, которое использует все склоны с pict2e»).

решение2

Символ для сегмента линии под определенным углом сохраняется в позиции (. Поскольку bidi отражает (и , )иногда вы получаете символ, сохраненный в )позиции , которая является наконечником стрелки.

Вы можете отключить зеркалирование, но, похоже, в настоящее время это можно сделать только между абзацами. Это означает, что вам нужно быть осторожным, чтобы не повлиять на текст (см. скобки во второй строке текста):

\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режим не работает при bidiиспользовании с babel.

Минимальный пример.

\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}

введите описание изображения здесь

Связанный контент