Writing and organizing literature notes for scientific writing

Vidianos Giannitsis (vidianosgiannitsis@gmail.com)

In this talk, Vidianos Giannitsis shares how he uses Org Roam, org-noter, and zetteldesk.el to manage his literature notes and write articles. Afterwards, he will handle questions over BigBlueButton.

The following image shows where the talk is in the schedule for Sat 2022-12-03. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.

Format: 17-min talk followed by live Q&A (done)
Etherpad: https://pad.emacsconf.org/2022-science
Discuss on IRC: #emacsconf-gen

Times in different timezones:
Saturday, Dec 3 2022, ~10:45 AM - 11:05 AM EST (US/Eastern)
which is the same as:
Saturday, Dec 3 2022, ~9:45 AM - 10:05 AM CST (US/Central)
Saturday, Dec 3 2022, ~8:45 AM - 9:05 AM MST (US/Mountain)
Saturday, Dec 3 2022, ~7:45 AM - 8:05 AM PST (US/Pacific)
Saturday, Dec 3 2022, ~3:45 PM - 4:05 PM UTC
Saturday, Dec 3 2022, ~4:45 PM - 5:05 PM CET (Europe/Paris)
Saturday, Dec 3 2022, ~5:45 PM - 6:05 PM EET (Europe/Athens)
Saturday, Dec 3 2022, ~9:15 PM - 9:35 PM IST (Asia/Kolkata)
Saturday, Dec 3 2022, ~11:45 PM - 12:05 AM +08 (Asia/Singapore)
Sunday, Dec 4 2022, ~12:45 AM - 1:05 AM JST (Asia/Tokyo)
Find out how to watch and participate


00:00.000 My second brain 00:28.320 Contents of the talk 01:40.560 Bibliography management 02:35.200 Creating literature notes: ivy-bibtex-edit-notes 03:04.960 org-roam reference template 04:40.160 Demo 05:40.840 Annotating with org-noter 06:44.240 Annotating in English 07:02.120 Afterthoughts on an article 07:30.200 Adding a note 08:21.480 Creating permanent notes from reference material 09:01.680 The organization problem 09:21.520 zetteldesk.el 10:43.600 The zetteldesk-desktop 11:45.040 Filtering with ivy-bibtex 12:09.840 Inserting literature 13:46.200 Composing the final article 15:19.160 Thanks


00:00.000 Introduction 00:24.000 Q1 - Do you use flipping notes and do you keep them in org-roam? 03:21.000 Q2 - Does it work only for PDFs or does it work for more formats? 06:00.000 Q3 - Why use OrgNoter in place of Zotero PDF Reader? 07:04.000 Q4 - Thoughts on the future of Zettelkasten 08:16.000 Q4.5 - Collaborative Zettelkasten notes 12:03.000 Q5 - How do you find a way to get a nice overview of multiple notes to rearrange them? 15:26.000 Q6 - Can we use Zettelkasten for coding too? 18:29.000 Q7 - Is Zetteldesk available in Melpa? - Yes 19:33.000 Conclusion - thoughts about Zettelkasten

Listen to just the audio:


Literature notes are a cornerstone of one's zettelkasten. Especially for scientific writing which needs to be based on bibliography, having notes on the literature you read is essential. Inspired by a chapter of "How to Take Smart Notes" by Sonke Ahrens - one of the best Zettelkasten books out there - which talks about the process of writing a scientific article, I crafted a heavily personalized workflow for writing and organizing my literature notes, which I wanted to present to you. Due to university, I have worked on assignments meant to simulate scientific articles and through them I refined this workflow to what it is today, which I am very happy with. I even wrote my own package for addressing part of this workflow, which will be a pivotal part of the talk. I have tried to not overcomplicate the talk, but a familiarity to zettelkasten and scientific writing is expected to get the most out of the talk.

This talk will focus on how Emacs has aided me in scientific writing and will cover how I use various packages for this. Featured will be: Org-noter, one of my favourite emacs packages which I use to annotate articles using org-mode while reading them. I will focus primarily on its integration with my org-roam-capture-templates and how it, org-roam-bibtex and ivy-bibtex work together to very easily create and flesh out literature notes for the articles I find, but I will also briefly mention how I annotate articles. Then, how I use org-roam to then take what I learned from this literature and create permanent notes on it which I can then add easily to my Zettelkasten. And finally, how I organize both literature and permanent notes on a subject using my own project, the zetteldesk package, and how I can very easily create a first draft of my work using this. With the draft created organically through my notes, it is then almost effortless to write the final work, as it consists simply of reading the draft, making small changes and fixes and perfecting it so it is a ready product.


  • Zotero, the app I use for capturing literature I find, which is unfortunately not in Emacs as I haven't figured out a good way to do this from Emacs. (P.S. if you have a good workflow for doing this from inside Emacs, I would love to have a discussion with you because leaving Emacs annoys me).

  • Org-Roam, the bread and butter of almost everything in my workflow. Org-roam creates my zettelkasten and is the basis of the other packages here.

  • Ivy-bibtex, the package that allows Emacs to read .bib files and do things with them, allowing for bibliography management in Emacs.

  • Org-roam-bibtex. Integration between the 2 packages listed above so I can easily add literature notes to my Zettelkasten.

  • Org-noter, the package that does all the annotating. I can't take notes on an article without org-noter, its just the best way to do it.

  • Zetteldesk my personal project which was inspired by making this workflow work in Emacs. This package facilitates everything discussed in the last part of the talk about organizing your literature.


I am Vidianos Giannitsis, a 4th year chemical engineering student who loves to use Emacs. I have been using Emacs for about 2 and a half years and at this point it has become the most important part of my workflow. After seeing how awesome Emacs is, I was very inclined to learn elisp to truly customize Emacs to its limits. So I did, and at the start of 2022 I started working on a package of mine "zetteldesk.el". This package was inspired from "How to take smart notes" the well known zettelkasten book. I read something there and I was like, surely I can implement this in Emacs, can't I. And so I did.

I have watched EmacsConf for the last two years and I was interested in participating in it myself. Since I recently wrote a package of mine, I thought it was a good opportunity to make a talk of my own. So I made this talk about managing literature as it is something I believe I can deliver unique information and something I have worked on a lot recently.



  • Zettelkasten and zetteldesk
  • Org-capture--pandocs into a note-taking format
  • Karl Voit: Capturing HTML content from my Firefox is easy with https://github.com/kuanyui/copy-as-org-mode
  • Leo Vivier's personal email address is dude@suits-do-suit-me.fr ;-) Spam me!
  • link to Leo's talk from last year: https://emacsconf.org/2021/talks/erg
  • Great talk, but I wish images in org mode would scroll smoother. It's a deal breaker for me. Does anybody know of a package that allows that?
    • not sure but iirc emacs 29 has pixel-perfect mouse wheel scrolling instead for line-wise scrolling -- maybe that solves that?
    • try M-x pixel-scroll-mode
  • have you looked into org-ref and specifically doi-utils? It adds a command that will download a bibtex entry for a given DOI. It even downloads the article (if possible) or to attach at pdf to it.
  • oh cool. what is the name of this package that scrolls an article? "org noter" "noder"?
    • org-noter
      • doctorhoo: I am using it quite intensively. The download does not work so often thanks to the journals making it difficult (I guess), but it is easy enough to add a manully downloaded one. The download of the bibtex (and assignment of a sensible key) on the other hand works very reliably.
  • This is a great demo. Thank you!
  • What is doing the org-mode presentation?
    • its org-tree-slide-mode
  • That was excellent. Thanks very much!
  • wow that was really nice. thank you
  • thanks vidianos
  • oooh, dired icons
  • Great presentation and a nice Q&A session
  • For my part, I like seeing talks on zettelkasten !
  • zettelkasten is exciting but I ended up doing something much simpler
  • thank you again for a great presentation. very inspiring.

  • From the speaker: I saw a lot of kind words while scrolling here to see if there are any questions. Thanks a lot everyone! Happy to be part of this conference

Questions and answers

  • Q:Do you use fleeting notes as well? Do you keep them in org-roam?
    • A:https://github.com/Vidianos-Giannitsis/Dotfiles/blob/master/emacs/.emacs.d/libs/zettelkasten.org#fleeting-notes
    • To document the answer I gave live I am adding a small description of it here. I do use fleeting-notes which I manage with org-journal. I have a custom function (org-roam-init-fleeting-note) in the link above which gives the note an id (makes it an org-roam note), gives it a todo value and links it to my Current Projects node. This way, the note is inserted to my zettelkasten. But, when the TODO value becomes DONE I have a hook that removes the ID. This is the method I use for archiving fleeting notes when they are no longer needed. I don't use org-roam-dailies as I am not aware of a way to archive them that is this seamless.
  • Q:Does it work for PDFs only or can we use it for Word and Excel files too? or epub, websites "eww" or videos like youtube?
    • A:Leo says Org-noter does allow epub notes through an extensions, and works with DocView for Office docs. Can also use Pandoc
  • Q: I used to take notes on PDFs similarly in org-noter, but the recent Zotero PDF reader is also very nice. Have you looked into integrating the Zotero PDF reader with org-noter?
    • A: While the program is nice the author dosn't use it becouse it is not emacs nor have emacs bindings
  • Q:Great presentantion Vaidanos. Can you let us know your thoughts on Zettlekasten's future?
    • A: Zettelkasten has a great future because plaintext will never go away
    •        and orgmode is open source with a vibrant community.  Leo adds: Zettelkasten popularity shot up big in 2020.
  • Q: Have you found a way to get a nice "overview of multiple notes" to re-arrange them? Like physically putting many small notes on a table and re-arranging them?
    • A: Original goal of speaker's new package Zetteldesk.el is to get notes
    •        in a table and organize them. The idea is to use the Zetteldesk as a scratch buffer. But making it graphical would be hard.  (do check the 3rd demo of the talk if you haven't already at 11:10 mins)
    • A: The Koutliner in the GNU Hyperbole package can be used for this where all notes would be organized, autonumbered and automatically have a per-file unique hyperanchor ID.  You can move notes/ideas around the same way you do in Org outlines.  Besides collapsing and expanding trees of notes, you can also clip the view to a particular number of lines per note for overviews.  It supports Org tables too.
  • Q: Following up on the previous question, it seems difficult or impossible to do with emacs rendering, but perhaps with similar strategies as org-roam-ui one could get a Zooming User Interface for manipulating the notes on a big canvas. This is a FOSS prototype: https://jermolene.com/cecily/ and this is a SaaS (proprietary) one: https://www.napkin.one/. What are your thoughts on this? Do you think it makes sense with your workflow?
  • Q: Can we use Zettlekasten for coding too? Especially when using IDEs like Visual Studio and Excel?
    • A: Not sure, speaker is not in coding beyond Emacs Lisp and MATLAB. But he thinks it should be possible. Don't think it breaks the principles of Zettelkasten, can make notes for concepts. Leo confirms that note taking can be useful for programming and problem solving. Leo says code could be good for Zettelkasten "atomizing".
    • Comment from Karl Voit: I'm not using Zettelkasten myself but when I code, I'm heavily relying on my personal knowledge base which also includes Python snippets and sources (in my case) as I'm not a frequent programmer. So I forget the most basic stuff from one session to the next when there are weeks/months in-between. In the same fashion, a knowledge-base realized with a Zettelkasten is something that helps you here, producing better code and remembering previous patterns/tricks/sources/...
  • Q: will your zetteldesktop.el be available in elpa?


[00:00:00.000] Hello everyone, I'm Vidianos. Today I'm going to show you how I write and organize my literature notes using Emacs. I take my notes using Zettelkasten, which you may or may not have heard. It is about taking small atomic notes and linking them one another to create your so-called second brain. Here is mine. This is a graph of all the notes I have accumulated the last few years. It has various types of notes, but we're mainly going to focus on literature notes today.

[00:00:28.320] Here are the contents of my talk. We're going to start with bibliography management, which is how I take bibliography from the web and import it to Emacs. Then we're going to talk about how I create literature notes using a custom org-roam-bibtex template I have. And after talking about that, we can talk about how I write literature notes, which is through annotating an article using org-noter. Org-noter is a package that allows you to annotate PDFs using the Org format and creates a supplementary Org file to your PDF. Then we're going to talk about adding the literature to your Zettelkasten, which is a simple but important topic, and how you can write permanent notes based on the info you obtain from this literature. Lastly, we're going to focus on the organization problem one might find when having a lot of literature for an assignment or an article or something, and how I have tried to solve this with my package Zetteldesk. This isn't the perfect solution, but it is what I have, and I really like it. Finally, we're going to talk about how to compose the final article that you want to produce using this literature with the technique described in the rest of this talk.

[00:01:40.560] So let's begin the talk with bibliography management. Zotero is the bibliography manager I use. It is very simple to store articles with it, and it exports to .bib, integrating with packages such as org-roam-bibtex and ivy-bibtex. When researching, I typically find a long list of articles from a search engine. I open the titles which have interesting titles through their abstracts and save to Zotero those whose abstracts are the most relevant to what I want. From these articles, I typically won't read all of them because they're a lot, but I will select a few, once I have collected as many as I want. Zotero acts as a way to store everything that might be interesting, while Emacs and my Zettelkasten stores everything that is definitely interesting, and I have read it already.

[00:02:35.200] And then we can move to how I create literature notes. I set the default action of ivy-bibtex to ivy-bibtex-edit-notes, which will prompt-- which with org-roam-bibtex-mode active, prompts you for an org-capture template when selecting something if the node doesn't exist, or takes you to the existing node. And obviously you need to have this here, to set the default action that was already there to a letter.

[00:03:04.960] Then we can move to my org-roam reference template, using org-roam-bibtex. This isn't so complicated, but it has some important stuff I want to highlight. Save it to the ref directory, so I can remember where it is, and it's classified as a literature note. The file name is the cite key, which is easy and small, but the title is the actual article's title. Give it a tag of the entry-type; this is typically "article," but it's easy to sort things this way because not all literature notes are articles. And then give the keywords that are given by Zotero, because why not? Tags here are tags from Zettelkasten. These are the links to other files which are relevant, but its initialization is empty, obviously. And then this heading is where all the magic happens. The name is just not really so relevant; I just needed something that made sense. The properties are what matters, and mainly this one here. The ${file} attribute finds the file of this specific literature and makes sure that org-noter works by default here. As I'm going to show you in a moment, this way [of] initializing the literature note, org-noter works by default. That's all, basically, for the template.

[00:04:40.160] This is the point of the talk where we reach the first demo. This is about opening ivy-bibtex, selecting an article I want to annotate, initializing the literature note. We can see that everything is inserted in for me, and if I open org-noter on this heading, it opens the article, as expected. I can read the article, I can say I want to annotate something here. Obviously, annotation is not that simple as here, but I don't really have the time to actually annotate an article live. But you can keep going, and it's a good setup. Then close org-noter, and let's go presentation again.

[00:05:40.840] Moving on, this section is some stuff about my annotation process. As I said, there is not enough time for me to actually annotate an article live, but here are some things about it. First, is that I annotate with org-noter, which I absolutely love. It is great for annotations because you do them in org, which is an amazing format and gives you a lot of flexibility, such as adding to the Zettelkasten, being initialized by a capture template, and other things. But also, you don't need to look for the notes inside the PDF, which is a problem you can have if you annotate on the PDF, and it is very annoying in my opinion. So I prefer having these notes, and I can only focus on them, but I can also see where they refer. The other scenarios are not so good. Annotating on the PDF, you search for it, and if you don't know which section it refers to, then you need to look about it, and that is very tiring.

[00:06:44.240] Also, I am always annotating in English. This is not my mother tongue, but it helps me avoid the necessary mental overhead of translating while reading. I want to pay attention to what I read and not to translate stuff. I will translate later.

[00:07:02.120] And when finishing an article, I write a mini-abstract myself, which contains what I think about the article. It doesn't need to be much, it's usually like 3 or 4 paragraphs, and it shows things that are useful in the article, and what is mentioned that matters to me. So I can look back at it, and it is very easy for me to find what I got from this article, so where I will cite it on my actual project.

[00:07:30.200] Then last thing you need to do is add a note to your Zettelkasten. This is very easy due to it being in an org format. You can just have it in the org-roam directory, which it automatically goes to, and link it to other relevant notes, which is its index because everything in my Zettelkasten (at least) has an index, but also every other permanent note whose contents are in one way or another mentioned inside the article. This way the article is in a network with notes that are similar to it. Then we move on to the second demo, which is about a full-fledged literature note. We can go on org-roam-node-find, search for references, go to this, and you can see it is linked to other notes. And here is the mini-abstract, and here are my notes on it.

[00:08:21.480] The last thing you need to do when creating a literature note, is obviously create permanent notes based on what you read. If you never create these literature notes, you will never get new information. So for your Zettelkasten to grow, you need to create such notes. This means that the subject you are researching is not just literature notes but has well-structured permanent notes, which is what you will actually read. You typically only read literature notes to see what gets cited where. What you will mostly read is these permanent notes that you create from this knowledge.

[00:09:01.680] So finally we are at the last part of the talk, which is about organizing literature notes. And this is in my opinion the most interesting part because it is very unique. It uses a package I wrote myself, and it doesn't have as much usage as the rest of the things I described so far.

[00:09:21.520] So what is the problem you might find? Indeed, if you read a lot of things, you have a large collection of notes, and it's not the only thing you will think about. However, you do need to justify everything with citations, so you need to remember everything you read in these notes. You have done a lot of work, but there is still a lot for you to reach your final manuscript. Except if there was a handy little way to combine everything and sort it in a very easy way. Well, there is, and I think it came out pretty well. It's zetteldesk.el. It was inspired by this quote here from How to Take Smart Notes. Sönke Ahrens here talked about a desktop, which you have all the literature you want in that desktop, and you try to bring it in order. And by doing that, you can improve your ideas and have a structure so that your manuscript will then be very, very easy to write. And as I say here, in trying to do this, I made something much more general than it needed to be, so yeah, you can use it for many other things.

[00:10:43.600] But before I show you some things about it, I want to introduce you to what a desktop is. It's essentially a collection of the knowledge you want to be able to see. You add things to your Zetteldesk, and using filter functions, you only see these notes and nothing else, which in my opinion is very handy. So having said that, we can see these things in action for the final demo of the talk. This is the third one. I will go to an index file of mine. This is 3D printing, an assignment I had last semester. And this has 28 backlinks, so a lot of things that I looked at for this assignment. I can say I want to add the current note's backlinks to the Zetteldesk, and now I have a filtered version of org-roam-node-find defined, which only lists these 29 notes. Very nice, right?

[00:11:45.040] I can also filter just the literature notes, which can also use other UIs beside org-roam, such as, for example, one I use a lot is the ivy-bibtex command. This takes a lot of time, much longer than the org-roam one, but has them in this UI, which in a lot of cases is more useful for me.

[00:12:09.840] The other very important thing is inserting these. For example, say I want to insert a permanent note, such as this. Its title will become a top-level heading, and everything else will be inserted as expected. But the most important thing for us is inserting literature, right? This is done with this command, and let's say I want to insert this. The title again becomes a heading, and this is the article title also. I store the cite key here, and everything else about it is also here. And I can add others, for example, this and this. And we have all of them here. I see it says this is the basic, so let's put it at the top. And then maybe I want to put this last. And this way, you can sort things, and typically, on the other side, I have a manuscript, and I look at what order I want to have things in and sort the articles and the permanent notes in a way so that each section can have its own citations and its own notes, which makes writing, again, very easy, in my opinion.

[00:13:46.200] Finally, let's go to composing the final article. This is our goal: we wrote and organized all these literature notes to put them in your final project. This might be an assignment or an actual scientific article. It is apparent that you have done a lot of work for this so far, but you don't need to do a lot more. In my opinion, this is the easiest part of the whole workflow. People consider final article composition hard, but if you've done all these steps, you already have everything you want to add in the article from your notes. It's already there, a lot of things are copy-pasted, it's all in a coherent order, connections are to an extent already there, and you know what citation goes where, so you can justify everything you write. The actual draft isn't there, but it is very easy because now you just write things as you see them in your desktop and connect them. Connections are basic-- connections and making the article good, obviously, are basically the only thing you need to worry, but those are very important because others will only see the final manuscript, so if that's not good, then the whole assignment is not good, obviously. So it's not like your work is done, it's just very easy.

[00:15:19.160] And with that, I hope you liked my talk because it is coming to an end now. I want to thank you for your time; I hope you enjoyed it. You can feel free to email me at this address; it has also been on every slide since the beginning. I also have the GitHub for zetteldesk.el here, and I will be available for questions. I will be viewing both the pad and the IRC and will do a live Q&A after this. See you. Actually, before I go, let's show you the GitHub for zetteldesk.el. Here's the README; if you're interested on it, you can see more about it, and also I have a very in-depth wiki about it with 11 pages, and talking about everything that happens here. A lot of what we discussed is in this section about literature notes. These documents go a lot more in-depth in how Zetteldesk works, and also how to use it, so if you're interested, feel free to read them, and if you have any problems, you can open an issue about it; I will be very active. Thank you.

Captioner: hannah

Questions or comments? Please e-mail vidianosgiannitsis@gmail.com

CategoryZettelkasten CategoryOrgMode CategoryOrgRoam