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