article_image

本文成文较早,目前 GitHub 上的动作版本已优化,可以使用“数字fff”来插入脚注符号,支持任意位数——如果你愿意,可以超过三位数——的脚注,更符合直觉。

脚注作为 Markdown 语法中的外来者,在多数编辑器中都很难输入。本文提出一种基于 Keyboard Maestro 的方案,并借用 %TriggerValue% 将原本一大套动作简化为一个。

当今文章,脚注(footnote)颇为常见,以至于有人要反过来主张少用脚注。当然,这不是本文讨论的方向。

对于喜用 Markdown 的人来说,脚注并不容易输入。盖原始 Markdown 语法就不支持脚注1,设计者 John Gruber 提到脚注时也只是将其与链接相提并论,而没有设计脚注语法。后来的编辑器,大多也在脚注问题上含含糊糊,最后还是要在不同位置手动输入两遍 [^1] 形式的脚注,很误工夫。

有过之前用 Keyboard Maestro 输入其他 Markdown 符号的经验(见前文GitHub),稍作推广,也就有了本文的脚注输入方案。不过,脚注毕竟远比一般的 Markdown 符号复杂,绝非炒冷饭;如果人造物在这里还有延续性可言,那就不得不同时考察 Keyboard Maestro 中的特殊变量:%TriggerValue%。

Keyboard Maestro 动作下载

使用速览

相对正规的脚注语法由一组符号组成:在正文中的 [^脚注序号] 加上文末的 [^脚注序号]: 脚注内容。也有一种相对简单的写法,直接的正文中插入一段 [^脚注内容],但这种写法并不标准,很多编辑器并不兼容——包括早期的 Obsidian(我几乎不用 Obsidian 了,不清楚后来的情况)。后一种情况与输入超链接或图片链接无异,无需单独撰文;而前者,却并不简单(为避免网页渲染错误,以下代码中,我用粗括号代替了脚注标记中的原始符号)。

这里是正文。【^1】

【^1】: 这里是脚注。

我设计的 Keyboard Maestro Macro 可达到如下效果:

  1. 在文稿任何一处,以此输入两次 数字再加上一个 f(f 表示 footnote),即可运行 Macro;
  2. 根据刚刚输入的具体数字,Keyboard Maestro 会在先在当前位置插入 [^数字]
  3. 接着,Keyboard Maestro 会把光标移到文稿末尾并新增一行,接着插入 [^数字]: 并将光标移到此处,以便继续输入脚注内容。
Alt text
用同一个 Macro 插入不同序号的脚注

您可以自行修改触发方式(Trigger)——相应的,需要阅读后文,以修改 Macro 步骤——我选用两个数字加上 f,是为了好记且好按,直接换成快捷键固然无妨,而数字和字母的组合也可以。惟需注意,Typed String 应当是先数字、后字母的顺序,盖以 Typed String 为触发方式时,Keyboard Maestro 会先删掉输入的字符,再运行 Macro;而在中文输入法下,苟先英文、后数字,输入的多个字符会被当成一个,从而导致 Keyboard Maestro 多删一两个字符,破坏原有文本。而换作先数字、后字母,则无此虞。2

用正则表达式简化 Trigger

异于一般的 Macro,本方案只需要设置一次 Trigger,就可以覆盖 11f99f 九种触发方式,其中机关就是正则表达式。

稍微有一点自动化基础的读者,大概知道 Shortcuts 也有正则表达式相关步骤,我也写过一些文章。规则表达式是一种模式匹配,写一次表达式,射程就包括一类情况,而不用逐个记载;比如,若想对 JPG 和 PNG 文件执行同样的压缩操作,就可以写 jpg|png 这个表达式,表示遇到任意一种格式,都照常压缩图片。Keyboard Maestro 的特殊之处在于,其触发方式也可以带正则表达式,原本要写九次,有了正则表达式,写一次就足够。

Alt text
Macro 触发方式

图中的表达式 \d\df 表示两个数字加上一个字母 f,可以囊括 11f99f——其实,真正的范围是一百种情况,只是两个数字加一个字母的组合极为罕见,日常使用时不太可能按错(要求输入两次数字,也是为了降低误触概率)。

用 %TriggerValue% 减少动作数量

除去大大简化脚注输入过程,此 Macro 还可以照顾到从 [^1][^9] 的不同脚注,一以贯之;而通常的方案可能要为不同序号的脚注各创建专用动作,较难维护。而本方案之所以只需要一个动作,token 居功甚伟。

和正经的编程语言一样,Keyboard Maestro 中也拥有许多变量,而 Token 则是一类特殊变量,和用户自己预设的不同,token 会随着当前系统或软件的状态而不断变化;涉及 Keyboard Maestro 自身状态的 token 则更加特殊,可以实施监控 Macro 的运行状态,并反过来调整 Macro。换言之,token 就像 Keyboard Maestro 自动制导导弹中的控制器,四两可拨千斤。

本方案用到了 %TriggerValue%,它表示当前触发条件的值(value)。上一节已经提到,我们的触发方式是 \d\df,而 %TriggerValue% 可以捕获到具体按下的键。例如按下 11f,这串字符就会成为 %TriggerValue% 的值,并可以进一步调用。

理想的脚注插入方式是:

  • 按下 11f,输入一对 [^1]
  • 按下 22f,输入一对 [^2]
  • 按下 33f,输入一对 [^3]
  • ……(以此类推)

稍加观察,可以看出,按下的字符决定了最终文本中的数字,那么只需将 %TriggerValue% 抓到的数字插入文稿,就大功告成。

Alt text
Macro 步骤

其中的思维跳跃在于,我们不再预设一系列的动作、并为之设置专用的触发方式,而是将类似动作合并为一个,通过侦测触发方式的细微差异,调整最终插入的文本。关于 %TriggerValue% 的更多讨论。可见 Keyboard Maestro 论坛

小结

做一个复杂的 Keyboard Maestro Macro 是一件相对简单的事情,但做一个简单的 Macro,很可能是一件复杂的事情。此前介绍过的 Palette 也旨在简化 Keyboard Maestro Macro,不过只是停留在 Macros 层面,而 %TriggerValue% 则直接修改了 Macro 本身,简化程度更加彻底。

插入脚注,当然可以用传统思路,用得着几个序号就做多少个动作;可惜这样制作 Macro,水平很可能只是原地踏步——虽然也不耽误干活。而设计工具的乐趣,大概就在这些“只有上帝会看见”的内部细节上。

🛍 我撰写的付费栏目《Keyboard Maestro 进阶指引》正在 UNTAG 售卖,详解 Keyboard Maestro Macro 高级设计思路,欢迎选购:付费内容链接

Keyboard Maestro 进阶指引
Keyboard Maestro 进阶指引

  1. 至于其他同时期或更早的标记语法——比如 Aaron 发明的——由于它们一般不被视为“Markdown”,此处也就不深究。
  2. 您可以用自己的输入法试一试,看看数字和字母输入顺序调换的话,输入内容有何差异。

author_avatar

Lawyer, macOS/iOS Automation Amateur