Zotlit to Obsidian Workflow for manually created Zotero notecards

UPDATED: A previous version of this post had a more complicated workflow (using Linter). On the very helpful advice of FeralFlora on Discord, I have simplified things and added screen shots.

Zotlit → Zotero Workflow

Since it cost me some head-scratching and trial-and-error to figure out, I want to share my workflow for getting manually typed notes (as opposed to PDF highlights and comments) from Zotero to Obsidian using the Zotlit plugin, formerly called obsidian-zotero-plugin. Zotlit is now an approved Community plugin, and it is in very active development. Judging by the recent pace of updates, I suspect that some of the workarounds I describe below won’t be necessary for long. Even as it stands, I find Zotlit more convenient and much more configurable than Zotero Integration. I have a very large Zotero database, making it much easier to push references from Zotero rather than having to pull them in from Obsidian through the Zotero reference picker.

Terminology

  • “notecards” = notes that I have manually typed into Zotero
  • notes" = files in Obsidian
  • “source reference” = the reference in Zotero (with multiple notecards) that I will be importing and then splitting up into individual notes in Obsidian. The term also applies to the new note in Obsidian that contains publication information and links to the refactored notes.
  • “annotations” = highlights and comments on PDFs. (Again, I don’t have any of these in Zotero. (Mine will get to Obsidian from Bookends via Highlights – a subject for another day.)
  • “refactored notes” = the new individual notes in Obsidian. In other words, these are the Obsidian notes created by exporting all of the notecards attached to one reference from Zotero and then splitting that by heading in Obsidian to mirror the notecard structure in Zotero.
  • “Yaml key” = the term in your template that will become a property in your Obsidian frontmatter. If I understand correctly, the two things are synonymous.

Preconditions and Limitations

  1. I am an historian, and history is a book-and-archive discipline that requires extensive paraphrasing. Hence all of the manually typed notecards!
  2. My system relies on the fact that I have already turned the titles of my Zotero notecards into headings by adding "## " before the first line. As I explain below, you can also do this after transferring the notecards to Obsidian.
  3. Since I don’t keep PDFs in Zotero, I can’t comment on how one would export both notecards and annotations.
  4. Zotlit doesn’t currently allow you to batch export from Zotero to Obsidian, but this feature is clearly planned.
  5. There also seems to be plans to keep Zotero notecards and Obsidian notes in sync, but I suspect that my current workflow would would break (or severely complicate) that feature when it becomes available.
  6. Zotlit currently has a couple of small bugs, but I describe some easy workarounds below.
  7. I am not repeating instructions for Zotlit (available here: https://zotlit.aidenlx.top/).
  8. The developers clearly hadn’t planned for users who have notecards but no PDS in Zotero. I had to temporarily add a PDF to some sample references in Zotero to be able to use Zotlit’s nifty Live Template Editor, for which the documentation is otherwise very clear and helpful.
  9. You will need two other Obsidian Community plugins: Sort & Permute and Note Refactor.

Zotlit templates

I only changed two templates. Here are my current versions:

zt-note.eta.md:

# <% it.creators.forEach(($it, i) => { %>  <%= $it %>: <% }) %><%= it.title %>

[Zotero](<%= it.backlink %>) 
<% it.notes.forEach(($it, i) => { %>
  <%= $it %>
<% }) %>

zt-field.eta:

cssclasses: [<% null %>] 
aliases: [<% null %>]
type: <%= it.type %>
authors: [<%= it.authors %>]
title: "<%= it.title %>"
publication: <%= it.publicationTitle %>
date: <%= it.date %>
archive: <%= it.archive %>
archive-location: <%= it.archiveLocation %>
abstract: "<%= it.abstractNote %>"
citekey: "<%= it.citekey %>"
created: <%= it.dateAdded %>
modified: <%= it.dateModified %>
collections: <% for (const $it of it.collections) { %>
  <%= $it %>
<% } %>
people: [<% null %>]
themes: [<% null %>]
chapters: [<% null %>]
timeline: [<% null %>]
tags: <% it.tags.forEach(($it, i) => { %>
  <%= $it %>
<% }) %>
status: [<% null %>]

Notes:

  • “Collections” gives a list of the Zotero groups that a reference lives in, useful for jogging my memory about how I have used that source in past writing.
  • The other fields were chosen with future dataview queries in mind – things that I will fill in as I process my notes and will use to organize material for a book. The “[<% null %>]” code is necessary to create an empty Yaml key – a property that you will fill in later rather than something to be pulled in from Zotero. These fields can be whatever you like.

Obsidian Plugin Settings

Zotlit

  • Pick the folder you want to send notes to, keeping in mind that in order to make sure that the link between Zotero and Obsidian does not get broken, this has to be where you want the notes to live permanently.

Note Refactor

  1. Decide on the frontmatter properties you want to add to each refactored note. These don’t have to be the same as those for the source note. For example, I have added a “recipient” property for my refactored archival notes, since when using letters as a source, the recipient is as important as the author. (Everyone knows that historians love to read other people’s mail!)

  1. Pick a prefix for the batch of notecards you are refactoring. For example, for archival sources, I use the fonds (collection) citation, followed by an underscore.

Note: I am currently sending these refactored notes to a temporary folder for processing. I’ll move them back to their permanent home (03 archival) later. Your workflow may differ!

Steps: Let the Obsidification Begin!

  1. In Zotero, right click on the reference you want to move and choose Obsidian Actions/Create Literature Note(s).
  2. Check the note in Obsidian and make sure that the heading structure matches how you want to split the notes. If your Zotero notecards had no headings, add them (with markdown # prefixes) now. If your Zotero notecards already contain the correct heading structure, you need to overcome one small bug in the Zotlit export output before proceeding: Search for two extra spaces that get added before each heading. In my case, I replace " ##" with “##.” If you don’t remove the spaces, Note Refactor won’t be able to split the notes by heading.
  3. Sort by heading with the Sort & Permute plugin. This is to overcome another small bug in Zotlit, which currently spits out notes in a seemingly random order. You might not care about this, but I’m OCD enough to find it annoying that the note order doesn’t match the one I created in Zotero, even if the links all still work.
  4. Use Note Refactor to split the long note by heading.

Visualization

A newly imported note

You’ll note that the headings come up in the Outline view to the right. (I have already fixed the spacing problems before the headings and sorted them using Sort & Permute):

A refactored note

You can see the list of individual files in the “00 inbox” folder on the right, and the links back to the original source reference underneath the properties. I called this link “Parent source,” but you can name it whatever you like (or nothing at all) in the Note Refactor template. I would now edit the note and add the metadata in the front matter

The new source reference

The links below the properties and title will now take you to the individual refactored notes. You can also transclude the notes (tell Note Refactor to leave copies of the note along with links to the refactored notes) if you like. I haven’t decided what I’m going to do, but this version was easier to screen shot!

Conclusion

Now keep checking back to the Zotlit documentation for updates, because it seems clear that more functionality is on its way!

I hope this helps someone, and I am of course open to suggestions for improvements.

3 Likes

I discovered the ZotLit plugin yesterday (it seems to be a renamed version of what what previously called Obsidian-Zotero) and, similar to when I tried out Obsidian-Zotero about a year ago, I was impressed, but trying to use the plugin led me to conclude that it is not ready for production yet.

I would be more than happy to revise my judgement, so I’m curious whether you are using it regularly without problems.

Edit: I realize that this other topic may be the better place to discuss my question:

Sorry for the slow response. Yes, I have been using this with no problems. I much prefer the workflow to Zotero Integration.

Hi!! Thank you for sharing! I am wondering if you ever encountered importing multiple references from Zotero using the “create Literature notes” during your workflow? Did it work?
Currently I can only import one paper and create one note at a time and it’s taking forever.

To the best of my knowledge you can export references directly from Zotero. You can also select and export multiple items at the moment.

Thank you for your answer!
To clarify my question:
for this step:


can you actually creates multiple Literature Note(s) at once?

For me I can only create one note at a time, and it’s a little annoying because I will have ~10 papers to read everyday and I have to create the note for all the papers one by one…

Currently this is not possible.

Yes, it should be, if you use the Zotlit Zotero addon. This gives you a context menu option called “Create literature note(s)”. Just select all the items you want to create literature notes about, and then use this option.

Or are you saying that this option is broken / not implemented yet?
Edit: Sorry, I found the relevant bug report: Create literature note(s) only ever creates one. · Issue #246 · PKM-er/obsidian-zotlit · GitHub

1 Like