前言
我在 Obsidian 里记录我所有的数学笔记,感觉到即使自己已经熟练了 LaTeX 的各种公式和命令,限于输入效率,做笔记的速度还是太慢了。
效率的低下导致我大部分的时间在打字而不是在学习,这让我感到担忧,长时间重复的打字也让我心烦意燥。
我打算优化一下做笔记的方式,之前看到了一篇文章 我如何使用LaTeX和Vim在数学讲座中做笔记,作者讲述了他是如何做到用 Vim 搭配 LaTeX 做笔记和老师在黑板上写得一样快,但 Vim 对大多数人来说使用还是颇有难度,我尝试着能不能通过其他方法做到接近于他的体验。
放心,即使你从来没有使用过 LaTeX 和过程中提到的工具,我也会通过简明的介绍让你知道我每一步都在干什么。
输入法
输入法使用双拼而不是拼音。
双拼每打一个字需要 3 次按键,拼音输入法需要 1-7 次按键,不过,需要多次按键的字属于少数,加上选词会花费的时间是一样的,我个人体验下来在双手打字的情况下(也就是忽略手在按键之间移动花费的时间)双拼的效率大概为拼音的 1.5 倍,单手时,双拼输入效率则远高于拼音。
为什么不选择五笔输入法,因为它的学习成本实在太高。
当然,做数学笔记大部分时间还是在写公式,使用拼音影响也不大。
怎么入手学习双拼?
学习双拼有三个阶段
- 记不住键位
- 记得住但需要思考
- 形成肌肉记忆
双拼方案推荐使用微软双拼,适用最广泛,也有很多人喜欢小鹤双拼的键位。
- 在微信小程序里搜「双拼练习」,看着键位打出屏幕中的字,大约半个小时,能隐约记住所有键位
- 在设置里隐藏键位再次练习,这时如果忘记里某个键位,就到处按按摸索出来,实在没找到再看答案,大约一个半小时后,感到熟练了就停止练习。
- 接下来在生活中使用双拼,大约三天后就能形成肌肉记忆了。
光标移动
要打出这样一个符号
对应的 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 键盘得以无方向键的设计逻辑。
文本扩展
要输入这样一个符号
对应的 LaTeX 语句是
\overline{A}
其中,\overline{}
的这部分是我每次都需要重复输入的。
而通过 Alfred 里的 Snippets 功能可以让我仅输入特定的字符,就能将我输入的字符替换为这条语句。
那么应该将这串字符设置为什么,这里有四种思路
- 非单词关键词( ovl )
- 前缀、后缀( @overl )
- 非寻常大写( oveRl )
- 双字符( oover )
使用非单词关键词,一般将字符设置为原语句的缩写,但语句一多就容易记不住。
前缀、后缀的字符一般得是特殊字符,也就是说我得按下 ⇧Shift + 数字 才能按得出来,当需要输入的次数多了后这样的操作就会非常别扭。
使用双字符则可能会和其他单词产生冲突。
最好的方法是使用非寻常大写,不会和其他单词冲突,并且在 mac 里,不需要大写锁定这种按键,按下 ⇧Shift + 对应字母 就能按出它的大写,非常方便。
在 Alfred 中的设置是这样的。
当在任意地方打出 oveRl
时,Alfred 就会将 oveRl
替换成 \overline{}
,其中 {cursor}
的含义是替换过后光标所在位置,方便快速地输入内容。
输入这几种矩阵
对应的 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
,还有 align
、cases
等等,我也不能穷举完所有的环境并给它们设定相应的字符。
这时候 Snippets 的功能有点捉襟见肘了,我们需要使用到 Alfred 里的 Workflows 功能,它长这个样子。
Workflows 能够执行一系列自动化的动作,在这个示例里,我用颜色将一个流程分为了三个阶段,分别是触发、输入、输出。
触发有很多种方式,这里选择了 Snippets,也是通过输入某些特定的字符来触发这个流程。
进入第一个流程的输入阶段,这里选择 Keyword 方式,在任意地方输入 beG
,Alfred 会弹出一个窗口,在里面输入一些文本,这些文本将被赋予给一个变量 {query}
,这个变量在输出阶段将被用到。
输入这里我只进行了两个设置,Argument Required 代表我需要输入一些东西,Title 并没有实质性的作用,只是提示我接下来触发的命令有什么作用。
来到输出阶段,我选择的是 Copy to Clipboard,这和 Snippets 有点像,中间部分是将会复制到剪贴板的文本,在这里可以写上多个 {query}
,这样只需写一遍环境名,多个地方都会填充上,下方勾选的那个设置代表着这些文本将除了会粘贴到剪切板上,还会直接打出。
看一下实际的操作是怎样的
平时还会用到很多的希腊字母,比如
对应的 LaTeX 语法是这样的
\Gamma
\Phi
\delta
这次在输入阶段我选择了 listFilter,创建了一个希腊字母的列表,设置为无需输入。
通过输入 grE 弹出窗口时,通过 ⌘Command + 数字键 或方向键选择想要的希腊字母即可。
你会发现我这里每一个选项都有对应的图像,这是我在网站 希腊字母表 复制了希腊字母后,粘贴到 Pixelmator Pro 里,PixelmatorPro 可以直接将图层拖出为透明的 png 图像,将其拖到上方设置界面对应的位置就行了。
最后
本文虽然是在讲如何快速输入数学公式,但较为完整地还原了我从想到一个想法到将其执行落地中,所用到的技巧和工具,你也可以举一反三利用它们做到其他事情。
虽然没有达到那篇文章中的所有效果,比如他还通过正则表达式快速输入上标和下标,但也已然提高了许多速度,如果你也想要这样设置,你无需从头开始配置,我已将 我的配置 导出,下载安装后即可使用,如果有不符合你使用习惯的地方也可以调整。