Venn diagram of the intersection of Obsidian and Zotero for paper management. Obsidian on the left with learning, organising, finding and zotero on the right with saving, reading and annotating

Photo Credit:


Posted: December 9, 2024

My paper management system with Obsidian and Zotero

Reading papers is instrumental in doing research. But somehow, I never learned how to organise what you learn from papers in university. I’d rather not think about how much time I lost trying to find that one paper again.

My doors opened when I happened upon a blog by Alexandra Phelan about paper management. She shares how she saves paper notes with Zotero and Obsidian. Since then, I lost no more notes or papers.

But paper management is about more than importing notes from papers. In this blog, I share how you can keep track of your reading and make papers and notes more findable. My system takes a bit of time to set up but very little to maintain. And it saves me tons of time in the long run!

What is paper management?

Paper or reference management is your system for saving, reading, annotating, and retrieving papers. Paper management is closely related to knowledge management. It’s like your own library system for academic knowledge.

Before I had paper management, I lost track of papers I wanted to read, my notes, and papers I had read and wanted to cite. Paper management helps me to:

  1. Learn new things through reading interesting papers
  2. Save my knowledge by writing notes on the topics I learned about (like Data-centric ML)
  3. Search my notes easily
  4. Find previously read papers quickly
  5. Write papers more efficiently (more on this in another blog)

A good paper management system helps you work. It’s not about organising for the sake of organising. A good system is easy to maintain; you won’t stick to it if organising takes too long. I think these are the essential components:

  1. Somewhere to save papers
  2. Some way of knowing which papers are unread
  3. A way of storing the notes you make on papers
  4. A way to connect the notes to the original papers
  5. A system/categorisation that helps you quickly find the right paper or note

How complicated you make it is up to you. You need to find the right level of organisation and effort that makes the system work for you. I know people who don’t need task managers or even to organise their papers, but unfortunately, I’m not one of them. I need an external tool to keep track of ideas in my head. My handwriting is terrible, so it has to be digital. So, if you’re anything like me and want to improve your paper management, this blog is for you 😊.

Tools for paper management

I use two tools for paper management: a reference manager and an editor. The reference manager is software for saving and organising papers. The editor is software to write and organise notes.

My first reference manager was Mendeley. I chose it because you can access it in a web app. I switched to Zotero later. Zotero is a library for documents saved on your computer. Downloading PDFs is convenient when you do not always have access to the internet, like on the train. Finally, I chose Zotero because there is a plugin for importing notes into my editor, Obsidian.

Obsidian is more than just a simple editor; it’s a knowledge management system. It is entirely markdown-based but has additional powerful features, such as linking to other notes. Because of the linking, you’re not as reliant on a folder structure to organise your notes.

Furthermore, you can install lots of plugins for added markup and functionality. For example, you can import data and notes from applications like Zotero.

I’ll explain how to configure Zotero and Obsidian for paper management. First, how to save, read, and annotate papers in Zotero. Then, how to import and organise notes in Obsidian.

Organising papers in Zotero

Let's dive into the Zotero setup.

Configure Zotero

Before saving and annotating papers, we need to install and configure Zotero. Download and install the Zotero desktop app. I also use the Chrome plugin to save papers online.

Zotero has a nice feature called Quick-copy. It allows you to select a paper and drag and drop it into your document to insert a citation to that paper. I write papers in Overleaf, so I need citations in BibTex format. Zotero can export citations in BibTex, but it doesn’t give you control over the cite keys. I use the BetterBibTex Zotero plugin to create unique cite keys for each paper. It also gives you extra options for formatting the citation. Follow the installation guide to add it to Zotero. Zotero adds a lot of meta-information to the BibTeX item, like the abstract, if available. I don’t like this because it clutters your bibliography files. To remove fields from citations, go to BetterBibTex preferences > export > fields, and add any fields you want to omit.

Screenshot of the Export > fields item in the BetterBibTex preferences in Zotero.

Now, we can configure Zotero to use BibTex for Quick-copy. Go to Zotero preferences > Export > Quick-copy > Item format and select BetterBibTex. Don’t choose BetterBibTex QuickCopy: that will just insert a

\cite{citekey}
command.

Zotero automatically tags new papers based on subheadings and keywords. These tags clutter your tags panel and are unnecessary anyway because you can search for any term. To turn this off, go to Zotero preferences > General and untick “Automatically tag items with keywords and subject headings.

Setting up your Zotero library

Now, we will add some structure to our Zotero library to make keeping track of unread papers easier. I use a simple folder structure and tagging system.

I plan my week by blocking time for different projects. So, the most logical folder structure for me is to have a folder for each active project. When I want to read a paper, I just open the folder of the project I’m working on and pick an unread paper. I also have one folder for papers not associated with any project.

Tagging papers

I use coloured tags to quickly see which papers are unread. But before I can explain how that works, we need to save one or more papers in our library. Look up a paper online, and try adding it to your library using the (Chrome) Zotero connector. When you click on the extension, you’ll see a popup window with the paper's name and a down arrow to expand the window. When you click on it, you can choose which folder to save the paper and add a tag. Let’s tag the paper with “toread.”

Let’s go back to Zotero. You’ll see a panel with all the tags in your library in the window's lower left. It’s helpful to filter papers, but it doesn’t show you which papers you’ve read in a single look. But Zotero has a handy feature that assigns colours to each tag. The tag then shows up as a coloured rectangle in front of the paper title on the Zotero home screen. Right-click the “toread” tag in the Tags panel and select “Assign colour.”

Screenshot of the Zotero Tags panel with 3 coloured tags: toread, getpdf and toprocess

We’re all set up to read and annotate papers. We can keep track of unread papers and easily copy citations using the Quick-Copy feature. However, Zotero is not that easy to search! You get tons of unstructured search results. So it doesn’t help you to find forgotten papers. I use Obsidian's powerful linking feature to solve this.

Setting up Obsidian

I use Obsidian to make checklists, write documentation, and manage my knowledge. Writing notes about things I learn from papers and courses helps cement the information in my memory. Also, linking notes to related topics makes them more findable.

I import Zotero notes into Obsidian with the Zotero integration plugin. Install it in Obsidian. Go to the plugin settings and scroll to the “import format” section. There probably is already a default format there. We’ll update this.

If you want, you can change the folders where to import notes or the format of the note title. In this blog, I’ll only go into the template file. The template file renders the information pulled from Zotero. It uses the Nunjucks templating language. Finally, you can set the name of the import format, which is what you’ll see in the Command Palette. I set it to “Import Literature Note.”

My template has three components:

  • YAML frontmatter
  • Paper summary
  • Paper highlights and annotations

I import paper metadata like the title, authors, and publication date into the front matter. I also added space for custom meta-data like the project associated with the paper. I fill those fields after importing the note.

The paper summary is a short note (1-2 paragraphs) I write after reading the paper. I add it as an item note to the paper. I put it at the top so I can quickly scan paper notes. Finally, the paper highlights and annotations speak for themselves. The highlights appear as custom callouts (using the Callout Manager plugin) matching the colour of the Zotero highlight (I have a colour-coding system for reading papers).

Here's my template:

---
type: paper
tags: inbox {% if allTags %}{{allTags}}{% endif %}
citekey: {{citekey}}
status: read
dateread:
related: {% for relation in relations | selectattr("citekey") %} [[@{{relation.citekey}}]]{% if not loop.last %}, {% endif%} {% endfor %}
title: "{{title}}"
year: {{date|format("YYYY")}}
venue: {{publicationTitle}}
link: {{url}}
authors:
{% for creator in creators -%} - {{creator.firstName}} {{creator.lastName}}
{% endfor %}
project:
aliases:
topics:
---
# Notes
{%- if markdownNotes %}
> [!abstract] Summary
> {{markdownNotes}}
{%- endif %}
# Annotations
{%- macro calloutHeader(type, colorCategory) -%}
{%- if colorCategory == "Yellow" -%}
> [!quote] Quote
{%- endif -%}
{%- if colorCategory == "Orange" -%}
> [!question]
{%- endif -%}
{%- if colorCategory == "Red" -%}
> [!error] Disagree
{%- endif -%}
{%- if colorCategory == "Blue" -%}
> [!abstract] Info/settings
{%- endif -%}
{%- if colorCategory == "Green" -%}
> [!success] Contribution
{%- endif -%}
{%- if colorCategory == "Purple" -%}
> [!idea] Idea
{%- endif -%}
{%- if colorCategory == "Magenta" -%}
> [!methods] Methods
{%- endif -%}
{%- endmacro -%}
{%- macro noteHeader(type) -%}
> [!NOTE]
{%- endmacro -%}
{% persist "annotations" %}
{% set newAnnotations = annotations | filterby("date", "dateafter",lastImportDate) %}
{% if newAnnotations.length > 0 %}
### Imported: {{importDate | format("YYYY-MM-DD HH:mm")}}
{% for a in newAnnotations %}
{%if a.type == "highlight" -%}
{{calloutHeader(a.type, a.colorCategory)}}
{{a.annotatedText}}
{{a.comment}}
{%- endif -%}
{%if a.type == "note" -%}
{{noteHeader(a.type)}}
{{a.comment}}
{%endif -%}
{%- if a.type == "image" -%}
![[{{a.imageRelativePath}}]]
{%- endif -%}
{%- endfor -%}
{%- endif -%}
{%- endpersist -%}

Importing your first note

Save this template and update the path in the Zotero Integration plugin settings. Make sure Zotero is running. Now, open the command palette in Obsidian and type “Import Literature Note” You should see an option that says “Zotero Integration: Import Literature Note.”

When you click that, a red-and-white Zotero search bar should pop up. Type in the title of a paper and hit Enter.

Screenshot of Obsidian command palette with 'import litra' typed and the suggestion 'Zotero integration: import literature note' showing.

Screenshot of Obsidian Command Palette

Screenshot of Zotero selector

Zotero selector launched from Obsidian.

My first time doing this, I got a bunch of errors. Some problems you can run into:

  • PDF errors: I transferred my Mendeley library to Zotero, but the Mendeley export corrupted some PDFs. I downloaded them from the paper website to fix this error.
  • Empty notes: sometimes betterBibTeX has issues. Try to update the plugin and restart Zotero. Once it works, a new note should open in Obsidian with your paper notes.

Linking notes

The final step is to improve the findability of your notes. You have lots of ways of finding notes in Obsidian. Watch this Nicole van der Hoeven video to learn more about finding notes. As a result, searching notes is already much easier in Obsidian than in Zotero. But you can make it even easier by adding links to your notes. When you add lots of links to your notes, you can click through them, as on Wikipedia. So you can get to related topics without using search.

To improve the link navigation in my notes, I do four more things after importing a note in Obsidian:

  • Link to related papers and notes
  • Add an alias
  • Create notes for individual facts or concepts I learned

In the front matter, I add links to related papers in the “related” field. For example, when a paper is an extension of another method, or two papers use similar methods. The alias is like a second filename, so you can search the note by its original filename (the cite key) or by using the alias. I add the name of the methods (e.g., DARTS) as an alias because I usually refer to papers that way. I also add links to notes on related topics (like Deep Learning) to the "topics" field.

Finally, I check each of my highlights and annotations for new facts, concepts, or ideas. To avoid losing them, I make a separate note for each concept. I write what I learned in my own words (just 1-2 paragraphs, most of the time) and add a link to the paper.

On notes:

Create your own system

I do not use any folders or tags to find papers. I rely entirely on Obsidian search and links to related topics and papers. That’s enough for me. I just need to think of a related paper or topic, and I will be able to find the original paper and highlights in no time.

It doesn’t take that long to set up my system (I have it on two laptops!), and it takes even less time to maintain. However, I experimented a lot to improve it. If you have read Alexandra’s blog, you may have noticed that I don't use Pandoc or create reference lists in Obsidian. I tried this but found no easy way to make it work with BibTeX (with the time I was willing to invest). Eventually, I even moved away entirely from writing any drafts or texts in Obsidian.

So, over to you now. This blog is a starting point for your Zotero + Obsidian paper management system. Which parts of my system would you change?


You may also like...

← Back to Blog