基于Zotero的可溯源笔记工作流

年纪越大,记性越差。
智商不够,工具来凑。

一直以来,做笔记和文献管理是关系密切但相互剥离的两个工作流。在以文献为中心的工作流中,可以在pdf等文献源中直接做笔记,但这种笔记依附于源文件,难以和其他笔记、信息构成一个知识系统;在以笔记为中心的工作流中,可以将不同来源的信息汇集在一起形成知识系统,但抽取出的信息往往是知识碎片,源文件回溯工作不可避免,而回溯信息源的过程往往非常耗时费力。所以我一直希望能有这么一个软件或者工作流,能够将两个工作有机地组合在一起。Zotero 7发布后,偶然发现它的URI外链功能可以作为两个工作流的桥梁帮我实现这个需求。具体来说:

  • 使用Zotero管理文献,在zotero内置pdf阅读器中添加注释标记,形成外链。
  • 使用笔记软件记录、整理信息。在笔记中通过Zotero外链记录信息来源。
  • 在笔记软件中通过zotero外链关联并能跳转到zotero内的pdf注释位置,实现笔记和信息源的关联。

效果展示

先看最终实现效果:在笔记软件Obsidian(其他支持超链接的软件也可以)中点击包含信息出处的链接,系统会自动调用Zotero打开引文pdf(或网页,epub等),并定位到引文所在位置:

实现原理

以上功能实现的核心在于笔记中指向信息源的超链接,这种链接是由Zotero中的URI承载的。

  • 什么是URI
    • URI(Uniform Resource Identifier,统一资源标识符)是一种用来标记资源名称的字符串,和网址(URL,Uniform Resource Locator,统一资源定位符)有共同的历史来源,内在原理也非常相似。
    • 这里先拿网址做个类比,常规的网址,如https://www.zotero.org/support/,可以分成两部分,一是指定网络资源所使用的协议(如https,超文本传输安全协议),二是资源在服务器上的地址(www.zotero.org/support/)。通过URL网址,浏览器会使用指定的协议向服务器请求指定的资源,并返回给客户端。URI也是同样道理,主要用来告诉系统通过什么协议(常是系统中已注册的软件)来获取该软件中的指定资源。
  • Zotero URI链接原理及示例
    • 下图是一个典型的Zotero URI链接示例,具体结构分析如下:
      • zotero://是协议名,它告诉系统这个链接应该交给哪个软件处理。当用户点击这个URI时,系统首先会查找支持该协议的软件(这里是zotero,软件安装时会在系统中注册相关信息),然后打开该软件(已打开则激活该软件),并将后面的资源地址(及相关参数信息)传递给软件。
      • 资源地址,协议标志后面跟着的类似于网址的内容用来指定链接关键的资源地址(或操作)。这部分内容是由软件(zotero)定义的,上一步系统打开软件后,会将资源地址传递给zotero,zotero会根据自己的规则解析这些内容,并执行相关操作。zotero的URI链接非常好懂:
        • open-pdf/library/items 执行打开PDF命令,打开zotero文献库(library)中指定文献条目所关联的PDF;
        • LGWYZIGW PDF的编号,这是zotero在导入、创建文献条目,导入PDF文件时自动生成的,相当于文件的“身份证”;
          后是查询参数,和网页网址传参的常见方法一样,通过&连接多个参数:
        • page=2 PDF文件中的第2页
        • annotation=2ILCIZ9Q 前面指定PDF文件中的一个注释。在zotero中,每个笔注释等都有一个独立的编号,通过这个编号可以准确定位到注释所在的位置。

可以看到,通过上面的URI链接,系统可以自动打开zotero,并将zotero文献库中的指定PDF文件ID,pdf页码、文件中注释的ID等作为参数传递给zotero,zotero解析链接后能够自动跳转到相应位置。

URI的获取方法

了解了URI的原理后就只剩下一个问题了——如何生成Zotero URI链接?
目前,Zotero PDF中的许多注释,包括文本注释、高亮文本、下划线文本、选择区域等,都能通过复制(目前只支持快捷键,Ctrl+V)获取到其URI链接。
但是,事情依然没有那么简单,直接选中注释并粘贴到word、obsidian等软件中时,你只能获得选中的文本和文献出处的文内引用文本标记,比如复制下图中选中的一段高亮文本粘贴到word中得到的只是这样一段文本“the dialects of Chinese may be divided into roughly nine main groups.” (Chao, 1943, p. 2),仅通过这段文本是无法让软件自动定位到注释出处的。
事实上,在Zotero中复制注释对象时,被存到剪贴板中的并不只是上面那一段纯文本,而是一个包含了URI地址的超链接,只是这个链接的形式在word等软件中无法直接支持而已。那如何才能看到剪贴板中的完整内容呢,其实也很简单,只需要将复制的内容粘贴到记事本等任何一个纯文本编辑器中(或者在word中粘贴,选择“只保留文本”),就可以看到链接的原始内容了:
下面是粘贴到纯文本编辑器中的内容:

1
2
3
“the dialects of Chinese may be divided into roughly nine main groups.”
([Chao, 1943, p. 2](zotero://select/library/items/K6ZG62P6))
([pdf](zotero://open-pdf/library/items/LGWYZIGW?page=2&annotation=2ILCIZ9Q))

对这段内容进行一个简单的分析:

  • 引号引起来的是高亮标记的原文;
  • 后面跟着的内容可以分成两个结构相同的部分,形式化为([链接显示文本](URI链接)),如果你对Markdown笔记语法比较熟悉,很容易认出[]()其实就是Markdown的超链接格式,[]中放置的是链接显示的文字,()中放的是链接地址——就是我们要的URI链接。
    上面的剪贴板内容中包含了两个URI链接:前面一个链接到该pdf所对应的文献,可以在文献库中定位到对应的文献;后面一个是该注释的链接,可以直接链接到pdf中对应的位置。有了这两个链接就可以根据需要在各种笔记软件中构造能够跳转到Zotero引文出处的链接了。

含Zotero链接源的笔记构建方法

前面已经提到,新的工作流中搭起笔记和文献源之间桥梁的是超链接,因此windows下(其他系统未测试,手机端不支持)只要是支持超链接的软件都能实现这一功能,这里以两类软件为例:

  1. 传统笔记软件(如OneNote)和带超链接的其他非笔记软件(如Word、Excel、PowerPoint等均支持)。只需要在软件中给需要添加超链接的对象(文本、图片等均可)插入一个超链接,地址为文献源URI即可。此处仅以Word为例:
  2. Markdown类纯文本笔记软件。使用链接语法将对象链接设为Zotero URI即可。如,这里是笔记内容,我要在这里添加一个[溯源链接](zotero://open-pdf/library/items/LGWYZIGW?page=2&annotation=LCX274A3)。 这里的“溯源链接”文本可以随意修改,比如改成图标字符“📖”“🔍”等,能更清晰标记出溯源链接。

附带提一句,Obsidian有更丰富的URI支持,有更大的功能开发潜能。

最后,如果能写个zotero插件,支持定制复制出来的链接格式,让它直接支持Word等富文本编辑器和Markdown纯文本笔记软件就更好了。但是我没有时间……期待有缘人来做这个工作。