O pacote de cancelamento às vezes não funciona em hebraico

O pacote de cancelamento às vezes não funciona em hebraico

Costumo babelescrever documentos em hebraico e uso o cancelpacote para desenhar linhas em termos de uma equação para cancelamento. Até agora, isso tem funcionado bem. Recentemente, tentei cancelar um termo e, em vez de traçar uma linha sobre o termo, desenhei um monte de setas:

Aqui está o código relevante:

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

O estranho é que às vezes faz isso e às vezes traça uma linha bem definida, como você pode ver na foto. Não consegui descobrir o padrão de quando funciona e quando desenha aquelas setas estranhas. Depois de brincar com ele, descobri que o problema provavelmente se deve ao fato do hebraico ser o idioma principal. Quando altero as babelconfigurações para tornar o inglês o idioma principal, o problema desaparece:

As mudanças para o inglês:

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

Alguém pode explicar por que o \cancelcomando às vezes funciona em hebraico e às vezes não, e como posso corrigir isso?

Responder1

Embora eu tenhaabriu um problema, estou ciente de que elementos gráficos e matemáticos, que são intrinsecamente LTR (ou melhor, não deveriam mudar dependendo da direção), são problemáticos, porque muitos comandos e pacotes devem ser corrigidos (felizmente com luatexas coisas são mais simples do que com xetex). Por esse motivo, \babelsublré fornecida a macro, que muitas vezes, mas nem sempre, pode ajudar. Nesse caso, a seguinte alteração imprime o resultado esperado:

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

Editar.Note que babel, conforme indicado em seu manual, suporta o pictureambiente com pict2e. Infelizmente, \cancelnão utiliza o pictureambiente e, em vez disso, emula seu comportamento original, de modo que pict2enão tem efeito. (Há até uma nota no .texarquivo sobre este último: “Algum dia talvez encontre uma solução melhor que use todas as inclinações com pict2e”).

Responder2

O caractere para o segmento de linha em um determinado ângulo é armazenado na posição do (. Como bidi espelha o (e )às vezes você obtém o caracter armazenado na )posição, que é uma ponta de seta.

Você pode desabilitar o espelhamento, mas parece que atualmente isso só pode ser feito entre parágrafos. Isso significa que você precisa ter cuidado para não afetar o texto (veja os parênteses na segunda linha do texto):

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

insira a descrição da imagem aqui

Responder3

Parece que o picturemodo está quebrado quando bidié usado com babel.

Exemplo mínimo.

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

insira a descrição da imagem aqui

Possível solução alternativa (pode ter efeitos negativos na caixa delimitadora, se você usar \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}

Basicamente, dizemos cancelque o modo estendido pictureé bom.

insira a descrição da imagem aqui

Por outro lado, nada é necessário se você usar bidi=basic-r, mas isso pode ter outros efeitos colaterais.

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

insira a descrição da imagem aqui

informação relacionada