Skip to content

建议优化对插入行内公式时渲染逻辑 #5372

Closed
@mlzxy

Description

@mlzxy

在什么情况下你需要该特性?In what scenarios do you need this feature?

目前,当插入行内公式时,一旦输入了成对的 $$,Siyuan 会立刻渲染内部的公式,无论用户是否输入完毕。

如下 GIF 所示,插入行内公式时,当输入 \ 会立刻抛出 KaTeX 错误,然而此时输入才刚刚开始

1

此时,要点击错误信息,打开编辑窗口进行修改

描述可能的最优解决方案 Describe the optimal solution

第一次输入行内公式时,不要立刻渲染,允许用户结束输入,即使 $ 已经成对。

描述候选的解决方案 Describe the candidate solution

No response

其他信息 Other information

No response

Activity

mlzxy

mlzxy commented on Jul 8, 2022

@mlzxy
Author

更通用地来讲,这是目前 Siyuan 编辑器在处理行内公式的输入时的关键缺陷

编辑器会立刻渲染公式,无论用户是否结束了输入。 很多时候,我要输入一个公式,比如 [a, b], 我习惯先输入 $$, 然后在其中填补内容,但刚输入了 [ (此时内容为 $[$), 编辑器就把 [ 渲染了,此时我要打开编辑窗口才能继续写。

目前的 workaround 就是先输入 $, 然后输入latex代码,最后以$ 结尾。 用WYSIWYG的编辑器 比 写代码还要小心。

changed the title [-]建议优化对插入行内公式时 KaTeX 错误的处理(尤其是 `\` 符号带来的错误)[/-] [+]建议优化对插入行内公式时渲染逻辑[/+] on Jul 8, 2022
88250

88250 commented on Jul 9, 2022

@88250
Member

其他行级元素也有这个问题,暂时无法避免,否则解析会有二义性。

可能只能改变输入习惯,比如使用 / 菜单插入元素,谢谢。

mlzxy

mlzxy commented on Jul 9, 2022

@mlzxy
Author

其他行级元素也有这个问题,暂时无法避免,否则解析会有二义性。

可能只能改变输入习惯,比如使用 / 菜单插入元素,谢谢。

这个问题非常严重,不只是改变习惯的问题

对于本 issue 汇报的问题,通过逐渐形成习惯来规避相对容易,比如先输入 $ 然后输入代码,再输入 $

但另一个 issue #5371 ,书写的时候经常要对文字进行修订,那么从左边插入公式一不小心就会爆一大堆错误,把格式彻底搞坏

解析有二义性,但从使用的角度至少很多竞品都解决了该问题:

  • 我来拿 logseq 举例,他的做法是:编辑当前行时,不渲染行内公式,行内公式会在光标移开后再渲染。这个解法我觉得比
    Siyuan 当前一味的追求 “所见即所得的编辑” 体验好很多,而且逻辑很简单。
  • 再说 Typora 和 MarkText,他们甚至从功能上看已经完美解决了该 “二义性” 问题。 希望开发者至少试用一下 MarkText 以及 logseq。

当然我尊重开发者的计划,但我想基于自己的使用经验指出,Siyuan 对于数学公式的编辑体验真的非常差,这说明一开始设计就没有把数学公式当作重要的功能对待。 如果 Typora 对公式的支持是 90 分,那么 MarkText 80 分,logseq 60 分,目前的 Siyuan 也就是 40 分。

为什么这很严重?听起来似乎不是所有用户都有写公式的需求,但事实上,Siyuan 这种知识管理软件,面向的本来就是“有大量复杂知识需要管理的用户“。因为对于普通用户,Siyuan 没有吸引力,他们更喜欢稳定易用的传统记录软件,如 OneNote。 这些 ”高知识量用户“ ,他们对于公式编辑的需求是远大于普通用户的。


如果真的无法解决公式插入的问题,希望能提供切换到 markdown 源码编辑的渠道。

88250

88250 commented on Jul 9, 2022

@88250
Member

之前思源也是使用保留标记符的即时渲染模式,光标插入符离开之后才渲染。后来经过一段时间测试反馈,才决定改为所见即所得的。

前面我指的改变输入习惯是使用 / 来在左边插入元素,不使用 $。二义性问题其实在即时渲染模式中依然存在,举个例子:

输入:

foo $bar$

然后光标插入符移动到 foo 后输入 $b

foo $b $bar$

这时候就会出现二义性,这个问题可以在编辑器层面解决,让用户看起来是正确渲染,但是实际上导出 Markdown 文件以后却是错误的。思源为了保证数据迁移(比如转换为 Markdown)的正确性所以在编辑器层面将解析问题暴露给用户。

之前说的使用 / 插入公式可以规避这个问题,因为使用 / 插入公式时会自动闭合 $,这样才能做到没有二义性。

如果你有更好的方案,欢迎讨论,谢谢。

mlzxy

mlzxy commented on Jul 9, 2022

@mlzxy
Author

之前思源也是使用保留标记符的即时渲染模式,光标插入符离开之后才渲染。后来经过一段时间测试反馈,才决定改为所见即所得的。

前面我指的改变输入习惯是使用 / 来在左边插入元素,不使用 $。二义性问题其实在即时渲染模式中依然存在,举个例子:

输入:

foo $bar$

然后光标插入符移动到 foo 后输入 $b

foo $b $bar$

这时候就会出现二义性,这个问题可以在编辑器层面解决,让用户看起来是正确渲染,但是实际上导出 Markdown 文件以后却是错误的。思源为了保证数据迁移(比如转换为 Markdown)的正确性所以在编辑器层面将解析问题暴露给用户。

之前说的使用 / 插入公式可以规避这个问题,因为使用 / 插入公式时会自动闭合 $,这样才能做到没有二义性。

如果你有更好的方案,欢迎讨论,谢谢。

我做了一个 Siyuan 和 MarkText 的 Side by Side 比较,如下 GIF

1

可以看出,MarkText 也面临解析二义性问题,但当出现该问题时,MarkText 仍然允许用户继续编辑,从而让用户有机会消除该二义性。 因为二义性的出现,往往在一些编辑的中间状态。

而 Siyuan 没有给予这个编辑空间,我在左边已经不知道怎么修改了,其实只能都删掉。 我目前的 workaround 是在另一行写好了公式,从左边 Copy/Paste 进去。

88250

88250 commented on Jul 9, 2022

@88250
Member

使用 / 插入公式吧。

mlzxy

mlzxy commented on Jul 9, 2022

@mlzxy
Author

使用 / 插入公式吧。

这个 workaround 我可以接受,但建议把该点放在 FAQ 或什么地方,告知用户。

因为这个缺陷(或特点)是 Siyuan 独有的,大量从其他编辑器来的用户依旧保有 $ $ 的输入习惯,提前告知会控制预期,减少 Surprise

88250

88250 commented on Jul 9, 2022

@88250
Member

有道理,稍后加入 FAQ。

mlzxy

mlzxy commented on Jul 9, 2022

@mlzxy
Author

有道理,稍后加入 FAQ。

嗯,比如建议 Cmd+M 来插入公式,不推荐 $$

用快捷键习惯了后,效率蛮高的,这个 workaround 也不太糟。

added a commit that references this issue on Jul 9, 2022
mlzxy

mlzxy commented on Jul 9, 2022

@mlzxy
Author

参考其他编辑器,可以加一个设置,让用户选择是否开启 $ $ 语法

如果开启了可以使用,但会有上述问题,如没有开启,可以用 /Cmd+m 来插入行内公式

88250

88250 commented on Jul 9, 2022

@88250
Member

这个不只是公式,所有行级元素都有这个问题。

11 remaining items

Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @88250@mlzxy@Godsing@WingDr@Leeepu

        Issue actions

          建议优化对插入行内公式时渲染逻辑 · Issue #5372 · siyuan-note/siyuan