C6.30.1RTL caret versus visual advance设计研究

从右向左文字的光标移动方向与视觉前进方向相反

别名: RTL 光标 · 阿拉伯文插入点 · 视觉前进

概念解释

阿拉伯文、希伯来文等从右向左(RTL)书写时,新字符出现在插入点的左侧,行从右缘生长。视觉上的“往前写”是朝左。若编辑器仍按拉丁习惯把“前进”画成光标往右,使用者会看到光标往书写的反方向跑。这里说的是单一方向段落里光标与墨水生长的关系,还不是双向混排的边界情况。

机制

逻辑串按记忆顺序存储(先写的字下标更小),绘制时 RTL 段从右往左摆字形。插入点落在逻辑位置 i,下一击要插在 i 处,视觉上却出现在当前字形的左侧。 caret 的屏幕 x 因此在输入过程中递减。IME、退格、选区也要沿逻辑串走:退格删的是逻辑上的前一个字符,在 RTL 里往往是视觉右侧的字,对只看画面的拉丁用户像是“删了后面”。平台文本引擎(Core Text、HarfBuzz 加上双向算法)负责这一变换;自绘文本若只用 x++ 摆字,RTL 会立刻坏掉。

怎么研究

请 RTL 母语使用者在纯阿拉伯或希伯来段落里输入、退格、用方向键移动,记录他们期望的光标走向与实现是否一致。对比“逻辑 caret”可视化(显示下标)与纯视觉 caret。材料不要混进英文,以免进入双向段落。眼动可以看他们是否在行首(视觉右侧)寻找插入点。同一段再测一次右对齐与两端对齐,确认对齐方式没有把 caret 画回拉丁习惯的右侧生长。

边界

纯 LTR 段落没有这个问题。竖排中文的“前进”是向下,既不是左也不是右,不能套 RTL 规则。数字和拉丁字母嵌在 RTL 里会局部改向,那是混排问题。从左起排版但内容是 RTL 的网页(未设 dir)会把整段画反,光标再正确也救不了阅读。

怎么落地

  • 字段语言或 dir 与内容一致,让引擎用 RTL caret,而不是在 LTR 容器里硬画阿拉伯文。
  • 插入点的命中测试按视觉簇,不要按逻辑下标的线性 x。
  • 教程插图里 RTL 的“行首”画在右边。
  • 验证:在纯 RTL 文本末尾连续输入三个字母,光标应逐步左移且新字出现在最左;若光标右移,方向设错。

延伸

  • 同组C6.30.2 双向文本混排时,光标在方向切换点的位置需要额外规则判定所在逻辑序 · C6.30.3 光标视觉位置与文本逻辑插入点在双向文本中可能不直观对应 · C6.30.4 方向键左右移动光标的语义需要按文本方向重新映射,不能假设固定对应
  • 相邻C6.13 文本选择与光标定位 · C6.18 键盘布局的地区差异
  • 站内检索RTL caret · visual order · Arabic editing

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/C6.30.1