优化数学公式体验

本贴最后更新于 1090 天前,其中的信息可能已经时移俗易

这些想法由来已久了。

在思源 1.2 版本更新后,数学公式编辑机制更改,变成了类似 notion 的浮窗更改。
这种编辑方式在对于行级公式,也就是比较稀疏的公式是可以接受的,甚至更优于原先的方案。
但是对于比较密集的行内公式,编辑体验明显下降。

从创建和修改两方面来说。

创建时,有两种渠道:直接输入 $$ 以及按快捷键 Ctrl+M 呼出公式浮窗。
直接输入此时有一个 Critical Issue:转义。因此很多时候直接输入会被转义而导致格式出错,例如 \dfrac{\pi}{2},如果先输入 \dfrac{}{} 再输入 \dfrac{\pi}{2},就会对 } 进行转义导致输入失败。在触发转义之后,几乎一定是无法正常编辑的,因为 \} 会吞走一个斜杠。这个可以通过调整输入顺序来避免,但总归是时不时出现的烦心事。此外,上下标等语法也会与公式输入的内容冲突,导致莫名其妙的显示效果。
而另一种方法,按快捷键呼出公式浮窗,则涉及到一个操作步骤繁琐的问题,即要按专门快捷键呼出、按 Esc 关闭浮窗。不过其实还是可以接受的,习惯后并没有多么复杂。

那么对于创建,一个优化的思路就是直接砍掉传统的 $$ 输入方式,强迫用户习惯新的方式。
另一个思路是在开始输入 $ 之后暂停转义,直到输入完成后再继续转义。这个方案的问题在于,有的用户会需要单独输入 $,因此可能难以判断其是否打算输入数学公式。不过转义的使用频率非常低(大概?),或许可以作为配置项。(冗余配置项又增加了、、、)

而更大的问题在于修改。
对于行级公式,由于本身比较稀疏,而且体积大,用鼠标点击这种比较低效的方式进行修改也是可以接受的。
但对于行内公式,用鼠标慢吞吞地定位、打开、修改、关闭面板一套流程走下来,成本很大。
现在增加了选中公式用快捷键 Ctrl+M 呼出面板的功能,一定程度上缓解了这个问题,但其实还没有解决。因为选中公式并不快捷

选中涉及到一个定位到前后,然后按住 Shift 键进行光标移动的过程。与数学公式有关的光标经常出神奇的 bug,选中后显示效果也经常出神奇的 bug.
而且行内数学公式一般与前后都有空格隔开,这让选中的精力负担又有所增加、、、

2.gif

\ce{Cl2},选中之后出现神秘的 X,如果带前后空格选中了再按 Ctrl+M 就会出现神秘的 bug.

在我看来,这都是现在对数学公式的选中处理不到位导致的。

我们应该对选中数学公式进行特殊处理。数学公式可以获得鼠标的焦点,被点击,那么它也应该可以获得光标的焦点,被用键盘“点击”。

因此,一个思路就是在用键盘移动光标时,给数学公式添加一个焦点。
123X456,其中 X 是数学公式,那么我们移动到 3 与 X 之间有一个光标停留位置,在 X 与 4 之间有一个光标停留位置,这是现行的设计。
而我们还可以让光标直接停留在 X 身上,在此时就赋予其类似选中的效果,然后再按下 Ctrl+M 进行修改的心智负担就会显著减小。(事实上,此时可以直接设计成按 Enter/Space 呼出修改面板,因为已经确定是数学公式)

在视觉上也可以加以强化选中的感觉,比如添加一个蓝色边框。(我总是对这种交互有种莫名的熟悉感)

image.png

有点像是选中超链接的这种感觉?然后按下 Enter/Space 键开始编辑,挺自然的。

还有退出一方面,Esc 键本身在键盘的最左上角,其实按压成本相对过高。用 Vim 之类的软件也会有这样的问题(不过我用的是 61 键的小键盘,把 Esc 改到了大小写键的位置,所以其实没什么所谓、、、),一个思路就是在编辑面板按下 Ctrl + Enter 就保存编辑,类似 QQ 的发送键,操作起来可能更流畅一些。

以上是我的一些想法。我使用行内公式的频率很高,说实话现在也差不多适应了,不会感到有多难受,但总归是想能不能更流畅、更丝滑一点。这里也给出了一些设想的方案,但不知道可行性如何,也不知道是否真的能改善数学公式输入体验,欢迎大家的讨论。

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    20163 引用 • 77791 回帖
1 操作
Clouder 在 2021-07-28 22:28:49 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 创业

    你比 99% 的人都优秀么?

    83 引用 • 1398 回帖
  • jsDelivr

    jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。

    5 引用 • 31 回帖 • 51 关注
  • jsoup

    jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

    6 引用 • 1 回帖 • 473 关注
  • Chrome

    Chrome 又称 Google 浏览器,是一个由谷歌公司开发的网页浏览器。该浏览器是基于其他开源软件所编写,包括 WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。

    62 引用 • 289 回帖
  • 反馈

    Communication channel for makers and users.

    124 引用 • 907 回帖 • 224 关注
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 149 关注
  • 禅道

    禅道是一款国产的开源项目管理软件,她的核心管理思想基于敏捷方法 scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能,在一个软件中就可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序的跟踪管理起来,完整地覆盖了项目管理的核心流程。

    6 引用 • 15 回帖 • 181 关注
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    41 引用 • 40 回帖
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖 • 1 关注
  • SQLite

    SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。

    4 引用 • 7 回帖
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖 • 1 关注
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖 • 2 关注
  • OpenShift

    红帽提供的 PaaS 云,支持多种编程语言,为开发人员提供了更为灵活的框架、存储选择。

    14 引用 • 20 回帖 • 606 关注
  • Lute

    Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。

    25 引用 • 191 回帖 • 20 关注
  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    230 引用 • 1454 回帖 • 1 关注
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖 • 1 关注
  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 724 关注
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    192 引用 • 291 回帖 • 430 关注
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 232 回帖 • 1 关注
  • Ruby

    Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。

    7 引用 • 31 回帖 • 196 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 194 关注
  • Pipe

    Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    131 引用 • 1114 回帖 • 137 关注
  • Hprose

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 600 关注
  • 音乐

    你听到信仰的声音了么?

    60 引用 • 510 回帖
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 555 关注
  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    106 引用 • 152 回帖
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    165 引用 • 407 回帖 • 509 关注