# 巴别图书馆计划（五）：用 LaunchBar 检索并引用书籍

> 本文公开全文。

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

声明：鄙人并不赞成使用 Calibre 管理论文，盖论文已有更专业的管理工具，例如 Zotero。就我的场景而言，Calibre 只负责图书——即国标所谓的“专著、普通图书”。

“管理”图书有多层含义，或许覆盖了关于图书的一切活动，几篇文章下来，我们也触及了几个主要领域。

愿意精心管理书籍之士，很可能本就是正在读书之人，故本文将目光转向学术领域，提供一种用 LaunchBar 和 Calibre 快速生成引文的方案，以方便学术写作。只可惜本文写作之时，作者正于商海沉浮，难免与实际的学术工作有脱节之处，还烦请读者指出。

\>\>LaunchBar 动作“Calibre Citation”下载\<\<

## 使用简介与原理简析

本动作魔改自涔E的 Alfred 动作时，当时我发现自己并不需要评分等数据（因为我从来不给书籍打分），于是另作增减并调整显示方式——拼接组合之中，忽然想到，为何不干脆用 Calibre 做一个引文工具？毕竟，那些让人头大的引用格式，说到底不过是几项元数据的排列组合，而除了页码，其他图书元数据本就登记在 Calibre 数据库中，大可从中生成引文。

涔获取数据后将其显示在 Alfred 搜索结果列表中，令书籍信息一目了然；我的 LaunchBar 动作保留了这一显示效果，同时另行生成各种标准的引文，只需按下 ‌↩Return 即可将其拷贝到剪贴板。

本文生成引文的过程完全在本地进行，既意味着可靠且不泄露隐私，也要求读者自行维护 Calibre 数据，毕竟，如果连书库中的信息都是空的，那接下来怎么能做好这顿无米之炊呢。

究其原理，不过是在 LaunchBar 的主脚本中组合好引文数据，再通过动作（Action）脚本复制到剪贴板上。读者若希望自定义引文格式，也可以参考下文修改 LaunchBar 脚本的代码。打开脚本，可以看到内置了两种生成引文的代码：

```
temp["actionArgument"] = bookAuthors + ", *" + bookTitle + "* (" + bookPublisher + ", " + bookDate + ")."

temp["actionArgument"] = bookAuthors + "：《" + bookTitle + "》，" + bookPublisher + bookDate + "年版。"
```

第一段是针对英文文献的，第二段则用于中文文献，这是我主要使用的语言，当然你可以继续添加。就中文引文而言，我采用国内部分法学期刊的格式，即 作者：《书名》，出版社xxxx年版，就此，需要从 Calibre 中提取作者（bookAuthors）、书名（bookTitle）、出版社（bookPublisher）和出版年份（bookDate）几项数据，并用加号拼接起来。遇到需要插入符号或其他预设文本——比如 年版——的地方，则需要用引号包裹，此为遵循 Python 中拼接字符串的规则。

当然，更标准的 GB/T 7714\-2015《信息与文献参考文献著录规则》格式引文也可以轻松生成，其格式为：作者\.书名\[M\]\.出版地：出版社，出版年份。惟需注意，出版地 当然也是一项需要手动维护的信息，你可以直接将其并入出版社信息，也可以单列，并参考《巴别图书馆计划（一）》的方法存储、提取数据。

至于英文文献，本质上也只是排列各项 Calibre 元数据的问题。

## 用本文动作打开任何书籍

在《巴别图书馆计划（四）》中，我首先解决最普遍的需求——打开文件，而不是面向相对小众的学术写作。不过，本文方案与前文并非再无交叉的两条射线，事实上，本动作也可以打开任何书籍，并且几乎不需要改动代码。在此解释一下使用方法以及技术细节。

需要澄清，之所以分作两篇写作、发表，盖 LaunchBar 的逻辑是一个动作（Action）完成一项工作，而非 Alfred 或 Keyboard Maestro 那样在一个动作中可以分出多个分支。在此背景下，只能先解决紧迫而常见的问题，再回过头来提出更进一步的方案。

回到技术上，须知 LaunchBar 中的任何项目，尽管可丰可俭，但只有一个类型（type），而在按下 ⇥Tab 键发送给下一环节时，也仅有属于该类型的核心部分数据会被传过去，例如一本书，其核心数据一般就是文件路径（书籍一般是存储于本地的）或 URL（主要是 DEVONthink 中的项目链接）。既然如此，即便不编写任何特殊的脚本，也可以用 LaunchBar 自带的发送功能打开文件：

- 在 LaunchBar 中启动“Calibre Citation”动作，检索图书；

- 选定一个项目，按一下 ‌⇥Tab，接着按下 ‌⌘Command\-↩Return，即可用默认方式打开该路径或链接，若是路径，会调用默认阅读器打开，若是链接，则在对应软件（如 DEVONthink）或网页中开启；

- 也可以自定义打开方式，即选定图书后按一下 ‌⇥Tab，再选择想要的阅读器。

通过 ⇥Tab 打开书籍的好处在于，可以随时更换打开方式。例如 PDF Expert 改订阅制那会儿，我一面试着切换到 Skim 或原生预览工具，一面有保留了 PDF Expert，实在用不惯新工具的时候换回去，起码别耽误看书。

不过，Alfred 用户难免要批评 LaunchBar 的“发送主义”：在 Alfred 中，选定一个对象——比如一本书——后，可以用不同的快捷键启动对应操作，而不像 LaunchBar 这样反复装膛、瞄准、发射。这种微妙的操作差异，背后或许有更大的文章，我将在日后探讨，在此就姑且承认，LaunchBar 确实不那么符合直觉吧。

## 小结

本文介绍了用 LaunchBar 检索 Calibre 数据并生成引文的方案，并提供了对应的 LaunchBar 动作。同时，只需稍稍切换使用习惯，本动作也可以用于打开图书，完全覆盖了上一篇文章所涉动作的全部功能。

不过，一切的根本，仍然是维护得当的 Calibre 数据库，毕竟，问渠那得清如许，为有源头活水来。

---

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