前言

我在 Obsidian 里记录我所有的数学笔记,感觉到即使自己已经熟练了 LaTeX 的各种公式和命令,限于输入效率,做笔记的速度还是太慢了。

效率的低下导致我大部分的时间在打字而不是在学习,这让我感到担忧,长时间重复的打字也让我心烦意燥。

我打算优化一下做笔记的方式,之前看到了一篇文章 我如何使用LaTeX和Vim在数学讲座中做笔记,作者讲述了他是如何做到用 Vim 搭配 LaTeX 做笔记和老师在黑板上写得一样快,但 Vim 对大多数人来说使用还是颇有难度,我尝试着能不能通过其他方法做到接近于他的体验。

放心,即使你从来没有使用过 LaTeX 和过程中提到的工具,我也会通过简明的介绍让你知道我每一步都在干什么。


输入法

输入法使用双拼而不是拼音。

双拼每打一个字需要 3 次按键,拼音输入法需要 1-7 次按键,不过,需要多次按键的字属于少数,加上选词会花费的时间是一样的,我个人体验下来在双手打字的情况下(也就是忽略手在按键之间移动花费的时间)双拼的效率大概为拼音的 1.5 倍,单手时,双拼输入效率则远高于拼音。

为什么不选择五笔输入法,因为它的学习成本实在太高。

当然,做数学笔记大部分时间还是在写公式,使用拼音影响也不大。

怎么入手学习双拼?

学习双拼有三个阶段

  1. 记不住键位
  2. 记得住但需要思考
  3. 形成肌肉记忆

双拼方案推荐使用微软双拼,适用最广泛,也有很多人喜欢小鹤双拼的键位。

  1. 在微信小程序里搜「双拼练习」,看着键位打出屏幕中的字,大约半个小时,能隐约记住所有键位
  2. 在设置里隐藏键位再次练习,这时如果忘记里某个键位,就到处按按摸索出来,实在没找到再看答案,大约一个半小时后,感到熟练了就停止练习。
  3. 接下来在生活中使用双拼,大约三天后就能形成肌肉记忆了。
双拼练习

光标移动

要打出这样一个符号

formula1

对应的 LaTeX 语句是这样的

$$\lim_{k\to\infty}A_k$$

相信你即使不了解 LaTeX 语法也能读懂上面语句中每个部分的作用。

因为 Obsidian 有自动补全括号,所以当我输入到 \infty 时,我的光标是在 y} 之间的,这时候我需要将光标向右移动一位,如果我用右手去按 →,我的手将会离开核心字母区,导致在输入接下来的 A_k 时耽搁时间。

这里正确的做法是按 ⌃Control + F 移动光标。

为了操作的方便,我们需要到系统设置里将 ⌃Control 和 中/英 键切换位置。

修饰键

所有的按键搭配

  • ⌃Control + F(Forward):→
  • ⌃Control + ⌥Option + F:分词前进
  • ⌃Control + B(Backward):←
  • ⌃Control + ⌥Option + B:分词后退
  • ⌃Control + N(Next):↓ 下一行
  • ⌃Control + P(Preview):↑ 上一行
  • ⌃Control + A:回到行首
  • ⌃Control + E:回到行尾

如果还按下了 ⇧Shift,就能选中光标移动过程中途径的字符。

实际上,这也就是大名鼎鼎的 HHKB 键盘得以无方向键的设计逻辑。

hhkb

文本扩展

要输入这样一个符号

formula2

对应的 LaTeX 语句是

\overline{A}

其中,\overline{} 的这部分是我每次都需要重复输入的。

而通过 Alfred 里的 Snippets 功能可以让我仅输入特定的字符,就能将我输入的字符替换为这条语句。

那么应该将这串字符设置为什么,这里有四种思路

  • 非单词关键词( ovl )
    • 前缀、后缀( @overl )
    • 非寻常大写( oveRl )
    • 双字符( oover )

使用非单词关键词,一般将字符设置为原语句的缩写,但语句一多就容易记不住。

前缀、后缀的字符一般得是特殊字符,也就是说我得按下 ⇧Shift + 数字 才能按得出来,当需要输入的次数多了后这样的操作就会非常别扭。

使用双字符则可能会和其他单词产生冲突。

最好的方法是使用非寻常大写,不会和其他单词冲突,并且在 mac 里,不需要大写锁定这种按键,按下 ⇧Shift + 对应字母 就能按出它的大写,非常方便。

在 Alfred 中的设置是这样的。

overline

当在任意地方打出 oveRl 时,Alfred 就会将 oveRl 替换成 \overline{},其中 {cursor} 的含义是替换过后光标所在位置,方便快速地输入内容。

输入这几种矩阵

formula3

对应的 LaTeX 语句是

\begin{pmatrix}
1 & 2 \\
3 & 4
\end{pmatrix}

\begin{bmatrix}
1 & 2 \\
3 & 4
\end{bmatrix}

\begin{Bmatrix}
1 & 2 \\
3 & 4
\end{Bmatrix}

在 LaTeX 中 \begin{}\end{} 这样的语句叫做数学环境,如果我仍使用上面的方式就会发现,当我输入了 \begin{} 中的环境名,end{} 中的内容还等待着我输入,但它们明明是一样的,这样的效率很低下。

并且,环境不只有用于输入矩阵的 matrix,还有 aligncases 等等,我也不能穷举完所有的环境并给它们设定相应的字符。

这时候 Snippets 的功能有点捉襟见肘了,我们需要使用到 Alfred 里的 Workflows 功能,它长这个样子。

workflows

Workflows 能够执行一系列自动化的动作,在这个示例里,我用颜色将一个流程分为了三个阶段,分别是触发、输入、输出。

触发有很多种方式,这里选择了 Snippets,也是通过输入某些特定的字符来触发这个流程。

进入第一个流程的输入阶段,这里选择 Keyword 方式,在任意地方输入 beG,Alfred 会弹出一个窗口,在里面输入一些文本,这些文本将被赋予给一个变量 {query},这个变量在输出阶段将被用到。

输入这里我只进行了两个设置,Argument Required 代表我需要输入一些东西,Title 并没有实质性的作用,只是提示我接下来触发的命令有什么作用。

Keyword

来到输出阶段,我选择的是 Copy to Clipboard,这和 Snippets 有点像,中间部分是将会复制到剪贴板的文本,在这里可以写上多个 {query},这样只需写一遍环境名,多个地方都会填充上,下方勾选的那个设置代表着这些文本将除了会粘贴到剪切板上,还会直接打出。

copyToClipboard

看一下实际的操作是怎样的

workflow

平时还会用到很多的希腊字母,比如

formula4

对应的 LaTeX 语法是这样的

\Gamma
\Phi
\delta

这次在输入阶段我选择了 listFilter,创建了一个希腊字母的列表,设置为无需输入。

liftList

通过输入 grE 弹出窗口时,通过 ⌘Command + 数字键 或方向键选择想要的希腊字母即可。

greek

你会发现我这里每一个选项都有对应的图像,这是我在网站 希腊字母表 复制了希腊字母后,粘贴到 Pixelmator Pro 里,PixelmatorPro 可以直接将图层拖出为透明的 png 图像,将其拖到上方设置界面对应的位置就行了。

pixelMatorPro

最后

本文虽然是在讲如何快速输入数学公式,但较为完整地还原了我从想到一个想法到将其执行落地中,所用到的技巧和工具,你也可以举一反三利用它们做到其他事情。

虽然没有达到那篇文章中的所有效果,比如他还通过正则表达式快速输入上标和下标,但也已然提高了许多速度,如果你也想要这样设置,你无需从头开始配置,我已将 我的配置 导出,下载安装后即可使用,如果有不符合你使用习惯的地方也可以调整。