使用多语种和右手边语言会扰乱词序吗?

使用多语种和右手边语言会扰乱词序吗?

当 \setotherlanguage{hebrew} 处于活动状态时,即使在英语环境中,它也会反转 \text{} 中的单词顺序并打乱方程式的标签。以下是此行为的一个最小工作示例。

\documentclass{minimal}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{polyglossia}
\setotherlanguage{hebrew}
\setdefaultlanguage{english}

\begin{document}
\begin{equation}
\[\{ x\,|\,\text{yoda says hi\}\]
\end{equation}
\end{document}

输出结果如下:

在此处输入图片描述

有没有办法让单词和标签按照通常的顺序出现?

答案1

我认为这是amstext-xetex-bidi.defbidi软件包中的一个错误

\ProvidesFile{amstext-xetex-bidi.def}[2013/04/04 v0.1 bidi adaptations for amstext package for XeTeX engine]
\def\textdef@#1#2#3{\hbox{{%
                    \everymath{#1}%
                    \let\f@size#2\selectfont
                    \if@Latin\else\beginR\fi#3\if@Latin\else\endR\fi}}}
\endinput

绝不设置\if@Latin为 true。

我不确定应该在哪里处理这个问题,但一个解决方法是\@Latintrue在输入从左到右的语言时添加。

示例文件:

\documentclass{article}
\usepackage{amsmath}
\usepackage{polyglossia}
\setotherlanguage{hebrew}
\setdefaultlanguage{english}

\begin{document}

\begin{equation}
\{ x\mid\text{one two three} \}
\end{equation}

\end{document}

在此处输入图片描述

如果我这么做,

\documentclass{article}
\usepackage{amsmath}
\usepackage{polyglossia}
\setotherlanguage{hebrew}
\setdefaultlanguage{english}

\makeatletter
\appto{\blockextras@english}{\@ifundefined{if@Latin}{}{\@Latintrue}}
\appto{\inlineextras@english}{\@ifundefined{if@Latin}{}{\@Latintrue}}
\makeatother

\begin{document}

\begin{equation}
\{ x\mid\text{one two three} \}
\end{equation}

\end{document}

我得到了预期的输出:

在此处输入图片描述

请注意,这也解决了方程式编号的问题;另一项测试:

\documentclass{article}
\usepackage{amsmath}
\usepackage{polyglossia}
\setotherlanguage{hebrew}
\setdefaultlanguage{english}

\makeatletter
\appto{\blockextras@english}{\@ifundefined{if@Latin}{}{\@Latintrue}}
\appto{\inlineextras@english}{\@ifundefined{if@Latin}{}{\@Latintrue}}
\makeatother

\begin{document}

\begin{equation}
\{ x\mid\text{one two three} \}
\end{equation}
Also the numbers in \texttt{align} are printed right
\begin{align}
 a&=b\\
 0&<1
\end{align}

\end{document}

在此处输入图片描述

答案2

这看起来像是一个 bug bidi(egreg 认为),但你可以用以下方法强制恢复:\beginL

\documentclass{article}
%\usepackage[T1]{fontenc}% don't use fontenc with xetex
\usepackage{amsmath}
\usepackage{polyglossia}
\setotherlanguage{hebrew}
\setdefaultlanguage{english}
\showoutput
\begin{document}
\[\{ x\,|\,\text{\beginL one two three\endL}\}\]
\end{document}

答案3

这不是bidi软件包错误;这是polyglossia软件包错误。四年前,该错误已连同解决方案一起报告给软件包的作者polyglossia,但至今仍未修复。

这个问题确实是一个重复的问题,因为它之前已经在这里被问过。

\if@Latin只是bidi包提供的一个条件,因此像polyglossia将非 RTL 语言设置为 false,将 RTL 语言设置为 true 这样的包xepersian会大量使用这个条件。考虑以下xepersian使用包的最小示例:

\documentclass{article}
\usepackage{amsmath}
\usepackage{xepersian}
\settextfont{Times New Roman}
\begin{document}
\begin{equation}
1+2=3\qquad\text{این یک فرمول است.}
\end{equation}

\begin{latin}
\begin{equation}
1+2=3\qquad\text{This is an equation.}
\end{equation}
\end{latin}
\end{document}

如您所见,两个方程式编号及其周围的括号都排版正确;正如预期的那样,第一个方程式的内容\text排版为 RTL,第二个方程式的内容排版为 LTR。\text

结论:这是polyglossia软件包错误;它已经四年没有被修复了,所以不要指望它能很快被修复。

相关内容