Matrix 精选

Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。

文章代表作者个人观点,少数派仅对标题和排版略作修改。


需求

兵马未动粮草先行,写毕业论文需要做很多思想建设,有一个顺手的写作工具和一个方便的文献管理工具可以给人一些动力和勇气。 我目前的需求很明确,就是用自己中意的 Markdown 编辑器来写论文初稿,使用 Zotero 来管理大量参考文献,然后论文转换成 Office Word 文档让老师们查看。 

如果选择 Office Word 来写,直接用 Zotero 插件处理参考文献没有任何问题,但作为 Markdown 的重度用户,用 Word 写上百页的文档实在是太难受。 于是,这篇文章就分享一下如何尽量优雅地借助 Zotero 用纯文本方式完成论文中参考文献的引用和管理。

所谓优雅是指当 Markdown 内容并转换成 Word 格式后,所有引用都需要被 Zotero 插件正确识别且可以随时在 Word 中进行修改更新,而常用的 Bibtex 加 Pandoc 方法并不能实现这个需求。

准备

工具

Markdown 编辑器:Ulysses 

奔着 Ulysses 在高价位上了 Setapp 的车,如果能用它把论文写完,这车费就没有白花。当然,用 Markdown 写论文最自由的就是对写作工具的选择,这里使用任何一个你顺手的编辑器都可以,比如 Typora, MWeb 甚至是 VSCode 都么得问题。 

文献管理工具:Zotero 

硕博这几年时间,我先后使用了目前国内使用率最高的三款文献管理工具,从 Endnote 转向 Mendeley 是因为当时觉得 Mendeley 没有 Endnote 那么「重」;从 Mendeley 转到 Zotero 是因为后者的免费和插件。关于 如何上手 Zotero 之前也有写过详细的介绍。

辅助

使用 Zotero 又不借助 Word 来管理参考文献,安装 Better BibTeX 插件是必选项,它为参考文献的引用和管理提供了一站式解决方案。 同时,把 Markdown 格式的文本用高度可定制的方法转换为 PDF 或者 Word 格式文档,绕不开 Pandoc 这个工具。我们熟悉的大量文本编辑器在生成其他格式文档时往往调用的都是 Pandoc。

概念

CITATION KEYS

所谓 Citation Keys(Citekey),可以理解为 Better BibTeX 给文献生成的一个 ID,当我们在文档中需要插入文献的位置按照一定格式输入 Citekey 后就等于告诉 Zotero 要在这里引用对应的文献了。 由于 Citekey 是纯文本格式,不同编辑器对文章本身的影响可以降到最低。在 Endnote 中同样有类似的引用方式,这个概念被称作 Temporary citation。 通用的 Citekey 格式为 [auth:lower][year],前半部分表示文章第一作者的小写姓氏,后半部分为文献年份,如果出现了重复,就会在后面添加 a b c 或者数字进行区分。 下图是 Zotero 中关于 Citekey 的展示。

CITE AS YOU WRITE

在写作过程中,如果仅将 Zotero 对应的文献 Citekey 复制到文本并没有什么难度,无非就是方便和效率的问题,即随写随引。 在 Word 插件中的 Zotero 的引用效果如下图所示。

类似的效果只有同时在我们使用的编辑器中实现,才能做到 CITE AS YOU WRITE。

自动操作

如果你在使用 macOS,或许还不知道它也有类似于 iOS 中快捷指令的功能,叫做 Automator(自动操作)。这个应用可以设定在什么情况下进行何种操作,本文将会涉及到一个脚本自动执行的问题,就会用到 Automator。 如果对它感兴趣,具体使用介绍可以查看 Apple 官方说明

设置

Zotero CITATION KEYS

我目前的配置如下图,所示。这里主要是修改了引用格式。

Pandoc filter

Better BibTeX 的作者写了一个 lua 脚本zotero.lua,用来实现从 Markdown 到 Word 实时引用的格式转换。我们可以在 Markdown 文本中写入相关元数据,或者在 pandoc 命令行中进行相关参数设置。

---
# all the regular stuff you have here
Zotero:
  library: <group name> # omitted to use your personal library
  scannable-cite: false # only relevant when your compiling to scannable-cite .odt
  client: <Zotero or jurism> # defaults to Zotero
  author-in-text: false # when true, enabled fake author-name-only cites by replacing it with the text of the last names of the authors
...

如果是 Zotero 个人 library , 没有什么特殊情况使用默认参数即可,直接运行如下命令:

pandoc input.md -s --lua-filter=zotero.lua -o output.docx

zotpick-applescript

Better BibTeX 在实现随写随引的问题上给出了多种实现方法。如果你是把 Atom 或者 VSCode 作为编辑器可以直接安装它们相关的扩展插件,具体可以查看 官方说明。 除此以外,还可以利用提供的 URL 自行设置在其他编辑器内的调用。例如 http://127.0.0.1:23119/better-bibtex/cayw?format=mmd&clipboard=yes 这个地址就表示会把选择的 Citekey 按照 MultiMarkdown 的格式 [#adams2001][] 进行引用,同时把内容保存在粘贴板中。 当然,无需我们自己写,已经有前人造好的轮子 zotpick-applescript

这里我们只需要下载 zotpick-pandoc.applescript 。

为了快速调用这个脚本,我们可以设置一个自动操作的 workflow,配置如下图所示。选择「没有输入」和位于「任何应用程序」,然后在左侧选择「运行 AppleScript」,在右侧弹出的编辑器中复制zotpick-pandoc.applescript 的代码即可。随后保存命名并保存该 workflow。

快捷键

为了快速调用这个 workflow,我们还可以在快捷键的设置中为它指定一个快捷键。

此外,因为 workflow 插入的格式为 @adams2001 而 Pandoc 转化时在 Markdown 中识别的格式为[@adams2001] ,所以有了另一个小需求:快速输入 [] 并且把光标置于两个括号间。

这个需求可以利用 TextExpander 和 Keyboard Maestro 等工具实现,为了让 Setapp 值回票价,这里我选择了和 TextExpander 同类型的应用 Rocket Typist。设置方式如下:

同时我给这个动作也自定义了缩写,方便快速输入。最终的实现效果如下:

如果使用 VSCode 来编辑,插件用起来非常方便,就无需上面这些设置了。

效果

接下来展示一下 Markdown 源文档示例,和转换成 word 文档之后的样子。

最后一步,就是在 Zotero 的 Word 插件中选择引用格式,点击「OK」,然后再点击「Refresh」就可以展示正常的引用格式了。如果想插入参考文献的详细信息,点击「Add Bibliography」即可。

扩展阅读

Better BibTeX 的官方文档是非常好的学习材料,可以了解更多的相关知识,推荐阅读。

此外,如果你感觉这些配置过于繁琐,可以尝试 Zettlr 这款直接支持文献管理的开源 Mardown 编辑器。我曾经使用过一小段时间,不过还是因为没有 MWeb 和 Ulysses 用起来顺手而放弃了。

如果你是 Windows 用户,则非常推荐使用 Zotero + VSCode + VSCode Zotero 插件的组合,关于 VSCode 用作 markdown 编辑器,可以参考之前少数派发布的 VSCode 场景化上手指南

> 下载少数派 客户端 、关注 少数派公众号 ,了解更精彩的数字生活 🍃