在 SiYuan 中流畅编辑阿拉伯语:RTL 从右到左排版实战 在 SiYuan 中流畅编辑阿拉伯语RTL 从右到左排版实战【免费下载链接】siyuanAn open-source, privacy-first, self-hosted knowledge workspace where humans and AI agents work together 开源、隐私优先、自托管的知识工作空间让人与智能体在此协作项目地址: https://gitcode.com/GitHub_Trending/si/siyuan在 SiYuan 中录入阿拉伯语段落与列表方向常与预期相反。SiYuan 是开源、自托管的隐私优先知识工作空间原生支持 RTLRight-to-Left从右到左编辑。读完本文你将能开启全局 RTL 模式、按选区调整方向并处理混排边界。 开启 RTL 全局模式全局开关决定整篇笔记的默认书写方向适合内容以阿拉伯语为主的笔记库。在外观设置中打开全局开关打开设置→外观找到从右到左书写开关其描述为“将内容以从右到左的方式进行渲染”。开关状态写入配置项editor.rtl编辑器重载后整篇生效再次关闭即恢复默认从左到右。下面这段注册代码定义了该开关保存动作直接回写editor.rtl配置group.switch(editor.rtl, { title: window.siyuan.languages.rtl, desc: window.siyuan.languages.rtlTip, save: (value) editorConfigApi.patch(editor.rtl, value), });源码位置app/src/config/tabs/appearanceTab.ts配置字段定义见 app/src/types/config.d.ts。确认 rtl 类名的生效位置开启后编辑器初始化阶段会给根元素追加rtl类名所有方向相关样式都挂在这一类下主题开发者也靠它判断 RTL 方向// 启用 RTL 时给 .protyle 元素添加 .rtl 类名方便主题开发者判断 RTL 方向 if (window.siyuan.config.editor.rtl) { this.protyle.element.classList.add(rtl); }源码位置app/src/protyle/index.ts。 按选区控制单块方向阿拉伯语笔记里夹杂英文段落或代码时逐块设置方向比全局开关更精细。用块级菜单切换方向选中目标块可多选未选中任何块时作用于当前光标所在块。在块操作菜单中点击 RTL 图标项选中块的direction被设为rtl表格与 HTML 块会分别写到table与protyle-html元素上。反向恢复选 LTR 项清除字体样式项可一并清空direction与textAlign。菜单项的核心逻辑如下对每个选中元素回调方向设置{ id: rtl, icon: iconRtl, label: window.siyuan.languages.rtl, accelerator: window.siyuan.config.keymap.editor.general.rtl.custom, click: () { this.genClick(nodeElements, protyle, (e: HTMLElement) { // ……表格、HTML 块有分支处理此处省略 e.style.direction rtl; }); } }源码位置app/src/protyle/gutter/index.ts。为 RTL 绑定快捷键打开设置→通用→快捷键在编辑器 → 通用分组找到rtl项。当前版本该项默认值为空未绑定任何组合键需自行设置例如 CtrlShiftR。绑定后在编辑区按键所有选中块会被批量写入方向。快捷键匹配与批量写入逻辑if (matchHotKey(window.siyuan.config.keymap.editor.general.rtl.custom, event)) { let selectElements: HTMLElement[] Array.from( protyle.wysiwyg.element.querySelectorAll(.protyle-wysiwyg--select)); if (selectElements.length 0) { selectElements [nodeElement]; } updateBatchTransaction(selectElements, protyle, (e: HTMLElement) { e.style.direction rtl; }); }源码位置app/src/protyle/wysiwyg/keydown.ts。理解 RTL 默认样式阅读列表与表格的 RTL 规则全局rtl类下列表符号右移、子块改用右缩进表格在未手动指定左对齐时自动右对齐.protyle-wysiwyg [data-node-id].li [data-node-id] { margin-right: 34px; margin-left: 0; } .protyle-wysiwyg [data-node-id].li::before { right: 17px; left: auto; } .b3-typography table:not([style*text-align: left]) { margin-left: auto; }源码位置app/src/assets/scss/protyle/_content.scss标题与段落的direction: rtl声明在同文件 L10-L18。用自定义 CSS 微调间距若阿拉伯语行距、引用块右侧留白不合习惯可在设置→外观页的自定义 CSS 输入框中追加覆盖规则例如.protyle.rtl .protyle-wysiwyg blockquote { padding-right: 1em; }规则只写在本地外观配置里无需改动仓库内的样式源文件。⚠️ 常见异常与处理现象按 RTL 快捷键没有任何反应原因rtl与ltr两个快捷键在默认键位表中值为空串事件处理只匹配你自定义绑定的组合键rtl: {default: , custom: }, ltr: {default: , custom: },源码位置app/src/constants.ts。解法到设置→通用→快捷键中为rtl绑定一个不与已有键位冲突的组合键后再试。现象批量改方向后想整体还原原因菜单与快捷键的方向修改通过updateBatchTransaction对全部选中块批量写入属于一次可撤销的事务。解法按一次 CtrlZ 即可整批还原或选中这些块后使用清除字体样式菜单项它会清空textAlign与direction两个内联样式app/src/protyle/gutter/index.ts。现象RTL 段落里的英文代码被自动反转原因这是浏览器 Bidi双向文本算法对 LTR 语段的正常处理并非 SiYuan 缺陷。解法代码块与纯英文段落保持 LTR不在块菜单中对它们设 RTL确需混合时逐块用 LTR 项收回方向。相关资源全局开关注册app/src/config/tabs/appearanceTab.ts编辑器 rtl 类名注入app/src/protyle/index.tsRTL 样式总集app/src/assets/scss/protyle/_content.scss块级菜单 RTL/LTR 项app/src/protyle/gutter/index.ts快捷键处理app/src/protyle/wysiwyg/keydown.ts打开设置→外观切换一次从右到左书写再选中一个段落用块级菜单的 RTL 项试一遍两种粒度的差异马上就能感受到。【免费下载链接】siyuanAn open-source, privacy-first, self-hosted knowledge workspace where humans and AI agents work together 开源、隐私优先、自托管的知识工作空间让人与智能体在此协作项目地址: https://gitcode.com/GitHub_Trending/si/siyuan创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考