双向文本

来自 ArchWiki

来自 Wikipedia:双向文本,是包含两种文本方向性的文本,从右到左 (RTL) 和从左到右 (LTR)。

概念

文本方向
在编辑时,设置文本方向会改变编辑器与文本的交互。它会影响文本导航、选择和插入。
文本对齐
一种呈现文本的风格化形式。例如:英语文本即使是 LTR 语言,也可以右对齐,但这不会改变文本的方向,文本方向仍然是 LTR。
伪 Bidi
一个伪造的区域设置,显示完全反转的英语句子,以模拟 RTL 上下文。这有助于不熟悉 RTL 语言的人可视化 RTL 问题。例如
This English sentence contains SDROW CIBARA EMOS and ends with English words.
简易双向模式
在普通终端中自动进行视觉文本顺序从右到左的输入。
逻辑导航
单词按照阅读顺序被遍历。
可视导航
单词按照显示顺序被遍历。 这个 GIF 演示了两者之间的区别。

逻辑导航是程序应该实现的正确导航方式,以完全支持双向文本。

Unicode 支持
在支持 Unicode 的文本编辑器中,可以通过在其前面插入特殊的格式化字符来控制文本方向:Wikipedia:RLM (U+200F), Wikipedia:LRM (U+200E),这是一种针对不支持切换文本方向的文本编辑器的变通方法。
双向算法
是应用于以正确顺序显示文本的规则集。

支持

为了使程序完全支持双向文本,它必须具备

文本整形 (RTL 整形)
正确应用字母渲染和连字。参见 W:harfbuzzComplete Text Layout
Unicode 双向算法 (UBA)
确定文本段的方向性并应用适当的渲染规则。
编辑和输入 (导航)
强制文本方向以及光标移动、选择、删除和插入(逻辑导航)的正确行为的能力。

UBA 和字母整形的一些实现

  • fribidi 是双向算法的一个开源实现。
  • python-bidiAUR 是一个用于相关功能的 python 库。
  • SheenBidi: C 语言中改进的 Unicode 实现。

浏览器

应用 RTL UBA 导航 注释
chromium
firefox
qtwebbrowser
webkit

编辑器

应用 RTL UBA 导航 注释
AbiWord
emacs 通过 扩展。另见:emacs 双向编辑
gedit 对于 Gedit <= 2.1,通过 扩展进行变通。
ghostwriter 基于 Qtwebbrowser
kate
LibreOffice 参见:LibreOffice#双向支持
marktextAUR 基于 Blink
neovim 参见 Vim#双向支持
notepadqq 不会修复。
texworks
vim [死链 2025-01-19 ⓘ] 否 参见 Vim#双向支持
featherpad
Visual Studio Code
mousepad
pluma
GTK
xed

终端

基于 VTE 的终端支持特殊的转义序列,可以改变双向文本的行为。例如,要为命令输出启用 UBA 支持,请使用 echo '\e[?2501h'。要了解更多关于双向文本转义序列的信息,请参阅 [1]

应用 RTL UBA 导航 注释
alacritty 已使用 alacritty 版本 0.13.0-3(2024-01-03)进行测试。不支持 RLO (U+202E)。
contour 已使用 contour 版本 0.3.12(2024-01-03)进行测试。不支持 RLO (U+202E)。
dvtm
extraterm 已使用 extraterm-binAUR 版本 0.74.0-1(2024-01-03)进行测试。不支持 RLO (U+202E)。
kitty 已使用 kitty 版本 0.31.0-1(2024-01-02)进行测试。不支持 RLO (U+202E)。
konsole 已使用 konsole 版本 23.08.4-2(2024-01-02)进行测试。
libvte 包括 基于 libvte 的终端,如 Gnome, sakura, xfce4, terminator... 少量问题:1
mlterm 已使用 mltermAUR 版本 3.9.3-2(2024-01-03)进行测试。
neatvi-git
pymux
qterminal 已使用 qterminal 版本 1.4.0-1(2024-01-02)进行测试。不支持 RLO (U+202E)。
radare2
Terminator 已使用 terminator 版本 2.1.3-3(2024-01-02)进行测试。
tmux 不会修复
Urxvt 已使用 rxvt-unicode 版本 9.31-4(2024-01-03)进行测试。不支持 RLO (U+202E)。
wezterm
xst
less

其他

应用 RTL UBA 注释
electronjs
groff
irssi
latex 使用 LuaTeX 或 XeLaTeX 与 polyglossia
Pandoc
typst
Wikipedia:HTML
wine

故障排除

首先验证 UTF-8 编码配置正确。确保您安装了与您的语言对应的字体:阿拉伯语、波斯语、希伯来语。对于某些终端,需要 (bicon-gitAUR) 才能正确显示 RTL 文本。

参见

内部链接

外部链接