跳转至内容

双向文本

来自 ArchWiki
(重定向自 Bidi)

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

概念

文本方向
编辑时,设置文本方向会改变编辑器与文本的交互方式。它会影响文本导航、选择和插入。
文本对齐
一种风格化的文本呈现方式。例如:英文文本可以右对齐,尽管它是一种LTR语言,但这不会改变文本的LTR方向。
伪双向文本
一种伪本地化设置,会完全颠倒英文句子以模仿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塑形)
正确应用字母渲染和连字。参见Wikipedia:HarfBuzzWikipedia:Complex text layout
Unicode双向算法 (UBA)
确定文本片段的方向并应用适当的渲染规则。
编辑和输入 (导航)
强制文本方向以及光标移动、选择、删除和插入的正确行为(逻辑导航)的能力。

UBA和字母塑形的一些实现

浏览器

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

编辑器

应用 RTL UBA 导航 备注
AbiWord
emacs 带有扩展。另见:emacs双向编辑
gedit 对于Gedit <= 2.1,通过扩展进行变通。
ghostwriter 基于Qtwebbrowser
kate
LibreOffice 参见:LibreOffice#双向支持
marktextAUR 基于 Blink
neovim 参见Vim#双向支持
notepadqqAUR 无法修复。
texworks
vim 参见Vim#双向支持
featherpad
Visual Studio Code
mousepad
pluma
GTK
xed

Terminal

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

应用 RTL UBA 导航 备注
alacritty 在2024-01-03的alacritty版本0.13.0-3下测试。不支持RLO (U+202E)。
contour 在2024-01-03的contour版本0.3.12下测试。不支持RLO (U+202E)。
dvtm
extraterm 在2024-01-03的extraterm-bin版本0.74.0-1AUR下测试。不支持RLO (U+202E)。
kitty 在2024-01-02的kitty版本0.31.0-1下测试。不支持RLO (U+202E)。
konsole 在2024-01-02的konsole版本23.08.4-2下测试。
libvte 包括libvte-based,如Gnome、sakura、xfce4、terminator... minor issues: 1
mltermAUR 在2024-01-03的mlterm版本3.9.3-2AUR下测试。
neatvi-gitAUR
pymux
qterminal 在2024-01-02的qterminal版本1.4.0-1下测试。不支持RLO (U+202E)。
radare2
Terminator 在2024-01-02的terminator版本2.1.3-3下测试。
tmux 无法修复
Urxvt 在2024-01-03的rxvt-unicode版本9.31-4下测试。不支持RLO (U+202E)。
wezterm
xstAUR
less

其他

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

故障排除

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

参见