当 \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.def
该bidi
软件包中的一个错误
\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
软件包错误;它已经四年没有被修复了,所以不要指望它能很快被修复。