El paquete de cancelación a veces no funciona en hebreo

El paquete de cancelación a veces no funciona en hebreo

Solía babel​​escribir documentos en hebreo y uso el cancelpaquete para dibujar líneas en términos de una ecuación de cancelación. Hasta ahora, esto ha estado funcionando bien. Recientemente, intenté cancelar un término y, en lugar de dibujar una línea sobre el término, dibujó un montón de flechas:

Aquí está el 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}

Lo extraño es que a veces hace eso y otras veces dibuja una línea muy bien, como puedes ver en la imagen. No pude entender el patrón de cuándo funciona y cuándo dibuja esas flechas extrañas. Después de jugar con él, descubrí que el problema probablemente se debe a que el hebreo es el idioma principal. Cuando cambio la babelconfiguración para que el inglés sea el idioma principal, el problema desaparece:

Los cambios para 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}

¿Alguien puede explicar por qué el \cancelcomando a veces funciona en hebreo y otras no, y cómo puedo solucionar este problema?

Respuesta1

aunque heabrió un problema, soy consciente de que los elementos gráficos y matemáticos, que son intrínsecamente LTR (o más bien no deberían cambiar dependiendo de la dirección), son problemáticos, porque muchos comandos y paquetes deben ser parcheados (afortunadamente con luatexlas cosas es más simple que con xetex). Por este motivo, \babelsublrse proporciona la macro, que a menudo, pero no siempre, puede resultar útil. En este caso, el siguiente cambio imprime el resultado esperado:

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

Editar.Tenga en cuenta que babel, como se indica en su manual, apoya al picturemedio ambiente con pict2e. Lamentablemente, \cancelno utiliza el pictureentorno y, en cambio, emula su comportamiento original, por lo que pict2eno tiene ningún efecto. (Incluso hay una nota en el .texarchivo sobre esto último: “En algún momento tal vez encuentre una solución mejor que use todas las pendientes con pict2e”).

Respuesta2

El carácter para el segmento de línea en un cierto ángulo se almacena en la posición de (. Como bidi refleja el (y el, )a veces el carácter se almacena en la )posición, que es una punta de flecha.

Puede desactivar la duplicación, pero parece que actualmente esto sólo se puede hacer entre párrafos. Eso significa que debes tener cuidado de no afectar el texto (ver los paréntesis en la segunda línea de 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}

ingrese la descripción de la imagen aquí

Respuesta3

Parece que el picturemodo se rompe cuando bidise usa con babel.

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

ingrese la descripción de la imagen aquí

Posible solución alternativa (puede tener efectos negativos en el cuadro delimitador, si usa \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}

Básicamente decimos cancelque el modo extendido picturees bueno.

ingrese la descripción de la imagen aquí

Por otro lado, no se necesita nada si usa bidi=basic-r, pero esto podría tener otros efectos secundarios.

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

ingrese la descripción de la imagen aquí

información relacionada