答案1
我认为你所看到的内容并不是很明显,即使在处理 LaTeX 文件时这肯定不是理想的。
我给出了 Emacs 的示例(可在“所有”操作系统上使用,当然也包括在 MS Windows 上)以及您如何在那里改变其行为。
(顺便说一句,我想知道您给出的输入在这里是否真的正确,因为首先有一个句号(!)。尽管我心存疑虑,但我还是使用了从问题中剪切粘贴时出现的那个句号。)
当我从你的问题中剪切并粘贴“首选的单行文本...”部分到 Emacs 中时,它显示为
正如您所观察到的,相同的美元并排显示。
我们知道$x^2$
这里有一个单位,但我不认为 Unicode 双向算法 (UBA)(例如 Emacs 实现的)应该看到这一点。
“$”符号具有双向状态“欧洲数字分隔符”,这是一种“弱”类型。符合要求的程序在以下情况下会看到它:解析文本中的数字。因此文本似乎具有(普通希伯来语文本)+(空格)+(数字)+(普通从左到右文本)+(数字)+(空格)+(普通希伯来语文本)。我并没有遵循算法的所有步骤得出结论,但我认为只有紧跟在明显的从左到右文本之后的“数字”也位于此 rtl 文本的从左到右部分中是正确的。
在 LaTeX 中\( \)
最好使用$ $
反正这看起来并不奇怪。对于我来说,在 Emacs
括号本身并不具有 ltr 功能,因此\(
这里是从右到左书写,并使用镜像“(”。只有里面的x^2
是 ltr 模式。在命令右侧有“\”是正常的,对吧,就像在这里添加了另一个命令一样:
通常,每个段落的方向性由其开头方式决定。这可能会在希伯来语 LaTeX 文件中产生奇怪的结果,其中有些行以(希伯来语)文本开头,有些以(ltr)命令开头。因此,如果\emph{}
用于第一的这个词将会改变一切!
通过在段落开头插入双向控制字符来明确设置它们应该如何显示,可以解决这个问题。在 Emacs 中,您还可以通过设置双向段落方向来一劳永逸地确定文件的方向性。因此,我最终会显示一个简短的完整文档,就像 Emacs 在没有设置该变量的情况下显示的那样,并且在明确设置它以显示此文本时,它会显示 ltr 或 rtl。
答案2
LRM
这主要与编辑器如何使用从左到右标记 ( ) 不可打印的 Unicode 字符有关u+200E
。如果有人懂波斯语,我已经在这里。我将尝试对该解决方案进行总结,该解决方案适用于 TeXstudio。主要思想是使用触发器来调用宏。触发器确实常用表达。
确保 TeXstudio 中的 Bi-Di 设置如下。您可以通过 访问此设置Options -> Configure TeXstudio -> Adv. Editor -> Bi-Di
。
通过 创建以下两个宏Macros -> Edit Macros
。第一个宏用于处理内联方程,如下所示。您应该键入$.$
编写内联方程,然后会自动调用宏,并将其替换为LRM$$LRM
并将光标放在美元符号的中间。现在,内联方程将如您所愿。这里的触发器是
\$\.\$
相应的脚本是
%SCRIPT
editor.write("\u200E$$\u200E")
cursor.shift(-2)
第二个用于处理内联命令,如\lr
和\text...
。由于我们已禁用LRM
TeXstudio 自动插入字符的功能,因此我们还应注意内联命令以确保正确显示。在这里,我将触发器设置为
\\((text.+)|(lr))\{.*\}
相应的脚本是
%SCRIPT
editor.write("\u200E");
editor.write(triggerMatches[0]);
editor.write("\u200E");
var pos = cursor.columnNumber();
cursor.selectColumns(pos, pos + 1);
cursor.removeSelectedText();
您可能会发现更好的正则表达式可以涵盖更多情况,但这个对我来说已经足够了。现在,当您键入右花括号时,例如\lr{RTL-text}
,将调用宏并用 括住整个内联命令,LRM
因此结果为LRM\lr{RTL-text}LRM
。请注意,如果您使用自动完成器,则应键入}
以触发宏。如果您按→以跳过}
自动完成器插入的 ,则不会触发宏。
现在,一切都应该正常工作,如以下视频所示。在这里,我正在输入波斯语。