# 用 Keyboard Maestro 制作页面链接，翻开 PDF 的任意一页

> 本文公开全文。

原文：https://utgd.net/article/8384

对于爱阅读之士来说，有一项功能堪称杀手锏，那就是通过 URL Scheme 直达书籍的任何页面。凡举有这项功能的软件，都有资格埤堄群雄，DEVONthink、Logseq、Skim、MarginNote 乃至并非阅读器的 Hook，都纷纷凭借 PDF 页面链接跻身效率工具兵器谱。

然而，或许是忍不住尝鲜，或许是确有需要使用不同的阅读器，我们都不太乐意被一个工具绑死。假设一个人已经很习惯 PDF Expert，那为了 PDF 页面链接而换工具，似乎有些伤元气——毕竟，上一段列出的多数工具，作为阅读器的口碑都不算名列前茅。

我本人先后用 PDF Expert、PDF Viewer 和预览工具看 PDF，它们都没有页面链接。为此，我设计了一套基于自动化工具的 PDF 页面链接方案，理论上支持任何阅读器，并且可以在 Keyboard Maestro 或 Shortcuts 中实现。

鉴于 Keyboard Maestro 的自动化操作最为润物细无声，远胜 Shortcuts 来回跳转之头晕目眩，本文将以它为例，您如果对 Shortcuts 有兴趣，可以与我联系交流；同时，为尽量照顾到更多的读者，本文以原生预览工具和 PDF Expert 为例。

## tldr（预览工具版）

你需要 这个 Keyboard Maestro Macro 和下面这个 URL Scheme。

```
kmtrigger://macro=【动作ID】&value=【书籍ID】#【页码】
```

- 安装前文提供的 Macro，右键复制其 UUID，取代 【动作ID】

- 创建一个 Keyboard Maestro 专用文件夹，找到 Macro 的 Execute Shell Script 步骤，用前述文件夹的路径取代 /Users/Min/KM/；

- 为 PDF 文件创建一个替身文件（alias）；

- 用上一步的文件全名（带拓展名）取代 【书籍ID】；

- 用想要打开的页码取代 【页码】。

你可以把做好的链接填入 Obsidian 或其他笔记软件，以便温习笔记时回顾原文；也可以在摘抄簿中附上链接，方便查找出处（Logseq 和 MarginNote 用户应当熟悉这个效果）；还可以将 URL Scheme 填入 Anki，复习时一旦遇到生疏之处，随时能够翻看原始材料。

## 原理简析

在 《如何一键打开 macOS 中的任何文件（以 Keyboard Maestro 为例）》 一文中，我分析了打开任意文件的思路；而打开特定 PDF 的某一页，其实就是百尺竿头更进一步，让 Keyboard Maestro 走得更远一点，不仅打开文件，还翻到指定的页面。这里的关键是，Keyboard Maestro 可以创建完全自定义的 URL Scheme，这让模仿 DEVONthink 等工具的页面链接成为可能。

将 DEVONthink 的 PDF 页面链接和我最终完成的 Keyboard Maestro 页面链接并置如下，可看到它们结构上的相似之处。和 DEVONthink 一样，我设计的页面链接也包括了书籍和页面两个关键参数，同时，为了唤醒负责打开页面的 Keyboard Maestro Macro，它还需要一个动作的参数。

```
x-devonthink-item://【书籍ID】?page=【页码】
kmtrigger://macro=【动作ID】&value=【书籍ID】#【页码】
```

Keyboard Maestro URL Scheme 和 Shortcuts 非常相似，都是先指定一个动作，然后运行它；如有必要，还可以带上一些参数。上面的 Keyboard Maestro URL Scheme，翻译成人话就是“告诉某某 Macro，打开某某书，翻到第几页”。URL Scheme 无非就是把既定的操作转译成 Keyboard Maestro 能够理解的语言。

书籍ID 是动作的核心。DEVONthink 的页面链接之所以可靠，在于它并不依靠文件名来打开 PDF，因此，无论你如何修改原始文件的名称或者移动其位置，都不影响 DEVONthink 打开它。Keyboard Maestro 固然没有 DEVONthink 那样周全的数据库，但我们可以借用 macOS 自带的替身文件当跳板，实现类似 DEVONthink 的可靠跳转。macOS 的替身文件相当于 Windows 的快捷方式，不管原始文件怎么改动或挪动，都可以通过快捷方式打开原始文件，这一特性特别适合拿来制作 URL Scheme，以免文件修改导致链接失效。创建替身文件时，为保持链接简短且避免歧义，我用分钟级别的时间戳数字代替原始文件名，这部分内容已在前作中解释过，这里我们直取其成果，即一串数字 ID，用以指定要打开的书籍。

至于如何翻找页面，我考虑了最通用的方法：模拟键鼠操作。例如在预览工具中，按下 ⌥Option\-⌘Command\-G、输入数字并按下回车，就完成了翻页操作。Keyboard Maestro 只是把 URL Scheme 中的页面填入翻页输入框，通过键鼠模拟完成了翻页流程。

马克吐温曾说，你不能拿着解剖刀去分析一个幽默作家，否则他马上会变成一个悲剧作家。很多自动化工具也是这样，一旦道破背后的原理，就会让人感觉自己知晓了魔术的秘密，事情一下子变得无趣。好在泄了气的感觉只是暂时的，一旦将自动化工具投入使用，你就从那个看魔术表演的观众成了魔术师，事情又有意思起来。

## 适配 PDF Expert

只需要修改 Keyboard Maestro 动作的键鼠操作部分，几乎就能让它适配任何一款阅读器，例如很多读者在用的 PDF Expert。

以 PDF Expert 为例，只需要更改阅读器后后续的键鼠操作即可，这里 有个现成的版本。详言之：

- 将 Execute Shell Script 步骤中的 Preview 改为 "PDF Expert"，注意需带英文引号，因为 PDF Expert 名称中有空格，需要用引号包裹起来；

- 模拟翻页窗口的快捷键 ⌥Option\-⌘Command\-G；

- 粘贴页码，这一步不用动，Macro 会自动从 URL Scheme 中提取页码；

- 模拟按下回车键。

## 小结以及展望

我的电脑上有 DEVONthink，也有 Skim，读 epub 则有 Calibre，这些工具都支持页面链接，按理说不需要再造一副轮子。其实不然。Keyboard Maestro 方案不依赖于某一款阅读器，属于兜底方案，不会因为更换阅读器而导致笔记中的 URL Scheme 失效。而且据我所知，很多人都喜欢尝试新阅读器，这就更有必要把页面链接方案和阅读器解绑，给尝试新工具开辟道路。

不过，本文的方案并不是最终状态，因为在理想情况下，整套页面链接方案应当由两个动作组成，一个负责生成链接，另一个则用于打开链接，就像 DEVONthink 里有“Copy Page Link”的选项，同时也会自动解析 x\-devonthink\-item\:// 开头的链接，而眼下尚需手动创建 URL Scheme。改进并不困难，例如每次都创建一个新的替身文件。并随之生成 URL Scheme；也可以制作一份替身文件名单，每次制作 URL Scheme 时从中调取 ID……但这些方案似乎都不稳定，一时间我还是停留在手写 URL Scheme 的阶段。

🛍 我撰写的付费栏目《信息管理，文件为本位的方案》正在 UNTAG 售卖，对本文话题有进一步讨论，欢迎选购。

🔗 付费栏目链接

---

[前往标准阅读页](https://utgd.net/article/8384?audience=web)
