双向文本

来自 ArchWiki
(重定向自 Bidi

来自 Wikipedia:双向文本,是包含两种文本方向性的文本,即从右到左 (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 塑形)
正确应用字母渲染和连字。 请参阅 W:harfbuzz复杂文本布局
Unicode 双向算法 (UBA)
确定文本段的方向性并应用适当的渲染规则。
编辑和输入 (Nav)
强制文本方向以及光标移动、选择、删除和插入(逻辑导航)的正确行为的能力。

UBA 和字母塑形的一些实现

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

浏览器

应用 RTL UBA Nav 备注
chromium
firefox
qtwebbrowser
webkit

编辑器

应用 RTL UBA Nav 备注
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 Nav 备注
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
mltermAUR 使用 mltermAUR 版本 3.9.3-2(2024-01-03)测试。
neatvi-gitAUR
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
xstAUR
less

其他

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

故障排除

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

参见

内部链接

外部链接