取消包有时在希伯来语中不起作用

取消包有时在希伯来语中不起作用

我以前用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被破坏了。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}

在此处输入图片描述

相关内容