磨刀不误砍柴工,文献管理软件这把刀确实是值得打磨的,选择Zotero而非其它文献管理工具,主要是看重了它的免费和可配置性,适合重度使用。 最新版 Zotero 7 在 Zotero 6 的基础上,进行了升级,包括非常多的优化,例如最基础的UI看着更漂亮了,等我把它的各种插件和配置都鼓捣好了,就更有动力(但愿吧)打开来看文献了。

网上关于Zotero有很多分享教程,但是绝大部分都是入门级的配置笔记,参考价值并不大,本文最主要的参考是Zotero非官方中文社区

基础

本地安装

直接从官网下载 Zotero 7,然后傻瓜式安装即可,需要注意的是两个位置:

  • 首先是软件安装位置,可以使用自定义安装方式,挑一个合适的位置即可,例如D:\ProgramMain\Zotero7
  • 然后是本地数据存储位置,默认是~/Zotero

数据存储位置比较占地方,我想将其迁移到别的位置,例如E:\<user>\Documents\Zotero7,首先需要在设置中更改

1
编辑 -> 设置 -> 高级 -> 数据存储位置

将其更改为自定义的目标路径,然后根据提示进行操作:将软件关闭,将原文件夹中的所有内容手动剪切到新文件夹,然后重新打开软件。

建议对数据存储位置整个目录进行定期备份,否则会丢失目录信息,但是因为存在数据库文件,不要把整个文件夹塞到Onedrive中,否则小更改会频繁触发备份。

存储与同步

首先我们需要搞清楚的是,文献管理软件本质上有两类数据需要存储和同步:

  • 首先,文献的PDF文件,通常是直接从各种网站上下载得到,然后存储在Zotero的数据库中的;
  • 此外,对于这些文献在阅读过程中,也会产生一些附属数据,例如标签,笔记等;
  • 除此之外,还有一些争对Zotero自身和插件的配置数据。

Zotero 将这些分成了两部分:

  • 数据同步:这部分占比很小,注册并登陆Zotero账户之后,Zotero直接提供对这些数据的云存储;
  • 文件同步:这部分占比很大,Zotero并没有免费提供存储,我们通常借助于webdav同步,最常用的就是坚果云,它支持webdav服务。如果坚果云仅仅用来干这一件事的话,免费账户每个月1G的上传也差不多够用。

需要到坚果云中拿到一个webdav密钥(不是坚果云账户密码),然后

1
编辑 -> 设置 -> 同步 -> 文件同步

填写到对应位置即可,并且将webdav链接填好,然后可以点击按钮验证通过。可以将下载文件的时机从需要时改为同步时,省得打开文件时等待PDF的下载。

显示列和视图

每一个条目都有非常多的信息,除了最基本的标题、创建者、日期等,还有很多辅助信息,我们可以选择部分列显示,某些插件也会使用额外的列来提供信息。

最基本的信息就是条目的标题(必须)和作者了,Style插件允许我们自定义显示哪些作者,例如0:1,-1代表显示第一个和最后一个作者。

视图则是下文中的Style插件所提供的功能,允许我们保存几套列显示的配置,并且可以快速切换,例如:

  • 阅读视图:提供条目的阅读状态,包括状态、阅读时间、#标签、标注,简记等;
  • 期刊视图:提供条目对应的期刊信息,包括期刊名称,期刊等级和影响因子等;
  • 日期视图:提供条目的日期,包括期刊发布日期,条目添加日期,条目修改日期等;

除了这里的日期列,其它信息都需要下文中的Style插件提供,包括这些信息:

  • 阅读进度:使用热力图的形式展示阅读进度,直接显示在条目标题项中,颜色高的代表已经精读过的部分;(自动生成)
  • 状态:包括空值、unread、reading、done四种状态,实际底层是通过标签机制实现的,见下文;(状态切换目前需要手动进行,也可以依赖其它tag插件自动进行)
  • #标签:显示文字的特殊标签,要求以#开头,见下文;(手动)
  • 简记:针对当前条目的简短文字说明;(手动)
  • 阅读时间:使用进度条的形式展示阅读当前文献所花费的时间(自动生成)
  • 标注:使用热力图的形式展示标注内容在全文的位置(自动生成)

包括这几列信息的阅读视图如下

实践发现,阅读进度、阅读时间和标注信息全都没什么用,影响软件性能,可能导致卡顿,并且数据显示不及时,数据容易丢失,决定将其关闭。

包含期刊信息的期刊视图如下

包含日期信息的日期视图如下

标签机制

首先整理一下Zotero的标签机制,因为有很多插件在原版标签机制的基础上进行了扩展,显得比较混乱。

Zotero将标签分为两类:

  • 手动标签:顾名思义,用户手动添加的标签
  • 自动标签:在导入过程中,Zotero 自动尝试抓取某些PDF文件中的关键词和主题词作为标签

个人不太喜欢自动标签,因此选择将现有的自动标签全部关闭,并且把对应选项关闭

1
编辑 -> 设置 -> 杂项 -> 基于关键词和主题词自动为条目添加标签

我们只讨论手动标签的行为。

标签是如何显示的?Zotero的逻辑是这样的:

  • 可以通过手动添加的方式添加一个标签,然后它就会在左下角的标签窗口显示;
  • 可以为标签加上一个颜色(只能选择九种颜色之一,不同标签可以共用一个颜色,但是一个库只允许有九个标签有颜色)和权重(权重影响排序)

虽然没有颜色的标签也不影响使用,我们正常使用标签完成标注和筛选功能,但是有颜色的标签地位是不一样的:它会以对应颜色的圆点呈现在条目标题前面,如图

因为只有九个颜色,我们实际无法区分相同颜色的标签,至于普通标签,就更不会在这里显示了。

除此之外,Zotero对使用emoji开头的标签还提供了额外支持:直接显示emoji而非圆点,如图

需要注意的是:

  • 我们不需要为emoji标签添加颜色,即使添加了也不会在上面体现。
  • 如果一个emoji标签开头有多个emoji,这里也会同样显示多个emoji。

我们可以用emoji标签实现一些辅助功能,例如用不同数目的星星标签代表我们对条目的不同打分:

  • ⭐⭐
  • ⭐⭐⭐

下面的Style插件就帮我们实现了这个评价功能,并且为其添加了一些辅助设施,原理就是这里的emoji标签。我觉得这个功能没啥用,就禁用了。

需要注意的是,将标签放在条目标题头部的做法其实是Zotero 7的新功能(个人感觉比较突兀),在Zotero 6中的标签是作为单独一列呈现的,但是也只能呈现各种颜色的小圆点或emoji,不支持显示文字;下文中的Style插件提供了将标签拆分为单独一列的功能,可以保持和Zotero 6一样的效果

1
标题 -> 列设置(标题) -> tags

由于Zotero的标签机制很鸡肋,Style插件引入了#标签的概念,它会解析条目的标签数据,提供了一个新列展示所有以#开头的标签的文字。 例如添加内容为#test#重要的标签,由于我们没有添加颜色,并且没有使用emoji开头,这种标签不会在标题开头显示,效果如图

这里的颜色只是Style插件提供的默认颜色。如果我们给#标签加上颜色,那么它既会在标题开头显示,也会在单独的#标题列中显示,效果如图

从实现角度来说,#标签实际就是采用了一个正则匹配/^#(?:.+/)*(.+)/来选择获取#开头的那些标签并进行显示。

除此之外,Style还利用标签机制实现了状态功能,包括:

  • unread
  • reading
  • done

这三种状态其实是通过/unread/reading/done这三个特殊标签实现的,测试发现我们可以改动这几个标签的颜色,但是不能移除颜色,否则功能失效。(使用/开头的标签通常有特殊用途,例如被第三方插件用于定制功能)

创建参考文献

对于选中的文献右键,Zotero原生提供了创建参考文献的选项:在右键菜单中选择创建参考文献表,会弹出如下的窗口

在这个面板中可以选择:

  • 参考文献的样式和语言
  • 在脚注和尾注中切换(测试发现,至少对于默认的样式,选择脚注或尾注得到的都是一样的结果,可能需要定制样式才会体现出区别)
  • 在笔记和参考文献两种模式切换
  • 选择不同的输出方式,默认复制到剪切板即可

在笔记模式下,会将如下形式的字符串复制到剪切板中

1
Chaturantabut and Sorensen, “Nonlinear Model Reduction via Discrete Empirical Interpolation.”

在参考文献模式,会将如下形式的字符串复制到剪切板中

1
Chaturantabut, Saifon, and Danny C. Sorensen. “Nonlinear Model Reduction via Discrete Empirical Interpolation.” SIAM Journal on Scientific Computing 32, no. 5 (January 2010): 2737–64. https://doi.org/10.1137/090766498.

直接选中多个文献,这里的复制内容是每一个文献的内容拼接得到的,对于笔记模式使用分号分隔,对于参考文献模式则使用换行符分隔。

显然这种方式是一种非常简单粗暴的导出参考文献的方式,可能适合用于一些非正式的笔记或文档中,非常不适合正式的论文中的文献管理, 对于使用LaTeX写论文的情况,这个功能是完全没有用的。

导出条目

对于选中的文献右键,Zotero原生提供了导出文献的选项:在右键菜单中选择导出条目,会弹出如下的窗口

在这个面板中可以选择不同的导出格式,这里只关注 BibTeX 格式和 BibLaTeX 格式。(Better BibTeX插件会在这里添加 Better BibTeX 格式和 Better BibLaTeX 格式,导出的内容基本一致,但是允许更灵活的配置)

对于某些格式,在面板下面会附加一些选项,例如包含笔记,包含文件和文件的注释等,这些选项不需要勾选(尤其是导出笔记这个选项,它的行为非常离谱,因为它把笔记的内容也塞到 .bib 文件中),直接导出即可。 最后会弹出文件浏览器的窗口,根据前面的选择创建.bib文件或文件夹。

这个导出功能对于操作大批量的文献比较实用,因为可以自动创建一个 .bib 文件,但是对于一两个条目的导出其实非常不太方便,我们显然更希望的是直接将条目的.bib信息复制到剪切板,而非创建一个单独的文件。

快速复制

Zotero支持快速复制机制:

  • 对选中的条目使用ctrl+shift+c可以直接将对应的信息复制到剪切板;
  • 直接将条目拖动到编辑器中,就可以直接将对应的信息进行粘贴。

设置方式如下

1
Setting -> Export -> Quick Copy

选择一个格式即可。例如选择 Bibtex 格式,自动获取的就是 Bibtex 格式的信息,可以直接快速复制,然后粘贴到 .bib 文件中。 如果选择默认的格式,行为类似于前面的创建参考文献(参考文献模式)并复制到剪贴板。

RSS订阅

大部分期刊都提供了RSS订阅链接,Zotero可以订阅RSS,虽然不能直接下载PDF和生成条目(被反爬虫机制拦截),但是至少会给出最新的文献列表,点击就会跳转到对应网址。

插件安装

Zotero 有非常多的第三方插件,主要就是写一些前端的代码,调用一些第三方接口,或者实现一些辅助功能之类的,插件本体是一个.xpi后缀的小文件。

我们可以从 github 上对应的插件项目中下载对应的 .xpi 文件,然后

1
工具 -> 插件 -> (齿轮)-> 从文件中导入插件

导入新的插件之后,通常需要重启整个软件才能生效

因为从 Zotero 6 到 Zotero 7 改动了很多代码,第三方插件通常无法跨版本兼容,只能支持某一个版本,在下载安装时需要注意。

目前的现状是:有的第三方插件分别提供6和7的版本,有的只支持7,有的只支持6并且放弃支持7,因为主要功能已经被官方实现了,例如导入文件时的自动重命名插件。

主要插件

Zotero有丰富的第三方插件,可以提供各种扩展功能。

第三方插件整体上说还是不太行,虽然花里胡哨的功能看起来挺好,但是在实际使用中的性能和稳定性都很差。

插件市场 addons

Zotero并不像vscode那样有一个官方的插件平台,这个第三方插件提供了插件市场的功能,包括了各种最主流的插件。

翻译插件 pdf-translate

这个功能非常重要,安装和配置比较简单,下载了就可以直接使用。

“万金油”插件 style

zotero-style 是一个非常复杂,功能很多的插件,给 Zotero 提供了很多各种各样的功能,并且对UI进行了一些美化,是一个绝对的万金油插件。这个插件的很多功能已经在前文中介绍了,但是还有很多实用功能没有提到。

Style插件的定制化程度非常高,比如各种颜色和样式都可以自行修改。

值得注意的是,Style插件提供的获取条目对应的期刊信息(期刊等级,影响因子等)的功能,是基于easyscholar平台提供的免费接口实现的, 我们需要先去注册一个账号,然后拿到对应的密钥,将其填入Zotero的配置信息中:首先打开下面的页面

1
编辑 -> 设置 -> 高级 -> 编辑器

然后搜索easyscholar,在对应的条目中输入密钥保存即可。

除了Style插件,其它插件例如 greenfrog 也提供了类似的功能,原理都是一样的,都需要填写easyscholar提供的密码。

虽然Style功能丰富,但是有些功能确实花里胡哨,非常不实用,开启的功能太多会造成卡顿,而且各种花里胡哨的功能并不稳定,可以在配置中禁用部分不需要的功能

1
编辑 -> 设置 -> Style

手动关闭关闭不需要的项即可。目前只开启了如下功能:

  • Tags·标签
  • #Tags #标签
  • Crator 作者列(手动修改为获取第一作者和最后一个作者,当然如果只有一个作者这里会重复,不过非常少见)
  • IF 影响因子
  • Publication 文献列
  • Publication Tags 文献标签列
  • Collection Item Count 在左侧边栏显示总的条目数
  • View Manager 视图管理
  • Dark Light Button 黑白按钮
  • PDF Styles PDF阅读背景色
  • Toggle Sidebar 快捷键 Alt+[ Alt+]
  • TLDR

中文支持 jasminum

这个著名的Zotero插件有一个中文名:茉莉花,它主要是为中文文献的使用提供支持,例如读取PDF中的中文元数据,获取知网上的信息等。

条目合并 zoplicate

Zotero对于文献库中的重复条目提供了检测和合并机制的,但是看起来不太令人满意,这个第三方插件对这部分功能进行了增强。(虽然没怎么用过,先安装了再说)

参考文献 zotero-reference

这个插件在PDF阅读过程中,可以自动检测文献中的参考文献并获取对应数据,看起来很方便。(和上面的zotero-style是同一个作者)

更好的BibTeX better-bibtex

Zotero自身提供了以Bibtex格式和Biblatex格式导出参考文献信息, 这个插件对这部分功能进行了一些增强,但是这部分的格式细节实在太复杂了,而且相关的教程文档比较匮乏,使用并不容易。

这个插件在Zotero原有的导出菜单中添加了 Better BibTeX 和 Better Biblatex 两个格式,只需要点击这两个子菜单即可完成导出,不需要自己去配置。此外,这个插件在右键菜单中也加上了单独的子菜单,可以更方便地进行操作。

记录一下目前的配置:首先是快速导出一个文献的bib信息,在下面进行设置

1
Setting -> Export -> Quick Copy

选择 Better BibTeX,对于选中的一个或多个条目直接使用ctrl+shift+c就可以复制对应的bib信息。

然后是引用名(citation key)的生成规则,LaTeX实际只要求引用名是唯一的即可。 这个插件其实有一套机制,希望尽量保证引用名的唯一性,但是我并不关注这些,因为出现重复引用名比较罕见,而且latex编译时会自动警告的。

需要注意的是,在不同的环境下导出key的规则并没有被明确规定,习惯上大家都会使用作者名称,年份,标题这些信息来生成一个重复率低的短字符串,仅此而已,具体的规则细节并不统一,例如对于同一个文献,Zotero默认导出的引用名和谷歌学术导出的引用名就不一样,

目前我在配置中使用下面的规则

1
auth.lower + year + veryshorttitle(1.0).lower

也就是第一个作者的last name,年份,再加上标题的第一个单词,全小写,例如klein2024entropy

最后,Zotero直接导出的.bib文件最大的问题其实是有很多乱七八糟的信息,很多都是不需要的,通过Better BibTeX插件可以过滤掉一些无用的项

1
file,eprint,eprinttype,eprintclass,abstract,keywords,langid,primaryclass,month,date,urldate,annotation

这里是根据导出的内容进行调整的,把不需要的条目加上去,再次导出就不会出现那些无用的项了。

BibTeX格式和BibLaTeX格式略有区别,后者支持更丰富的字段,但是前者的兼容性更好,因此主要使用BibTeX格式。

笔记插件 better-notes

Zotero自身提供了简单的markdown笔记支持,这个插件对这部分功能进行了增强。

Zotero自动生成的文献阅读笔记模板真香啊,马上从网上抄了几份模板,进行了一些修改,得到了较适合自己的一份文献阅读笔记模板,完整模板存放在Gist上:Simple Zotero Note

效果如图

实际体验后,发现这个插件并不适合我:

  • Zotero内置的markdown编辑器本身就不好用,完全比不了VSCode和Typora的编辑体验,而且markdown相比于latex也是不够的。
  • 在Zotero中使用笔记也不便于笔记的管理和备份等。

因此决定不再使用这个插件。

快捷操作

  • 当焦点在某个条目时,使用ctrl可以高亮它所属的分类,可能同时属于多个分类。

  • 条目移动:

    • 直接拖动条目到目标分类,条目会被添加到目标分类中,但是原本所属分类仍然保留;
    • 按住shift再拖动,则自动将条目从原本所属分类中移除。

补充

Zotero自带对于笔记的英文语法检查,但是字典不太行,很多误报错的红色下划线看起来很烦,可以在高级配置编辑器中禁用语法检查:搜索下面的条目

1
extensions.spellcheck.inline.max-misspellings

将值从500改为0,然后重启即可。