So, hello everyone, welcome to EmacsConf.
My name is Vidianos, and I'm a PhD student in KU Leuven,
and today I'm going to be showing you
how I managed to use Emacs as a reference manager,
replacing what was for me Zotero,
to a fully fledged approach inside Emacs.
So, what is my typical reference workflow?
First I need to find literature,
then I need to collect and organize it,
which I originally did with Zotero,
but now with Emacs centered tools
such as zotra and ebib.
Then I create a reading list.
This is a new addition to my workflow
I started doing after moving this approach to Emacs
because now everything is well integrated.
I have made a very nice reading list implementation
inside org-roam which I am going to be showing today.
Then obviously I need to read the literature, take notes,
organize the notes, and ensure I am actually learning
from what I am reading. This is then done through packages
such as org-noter and org-roam
and is not going to be the focus of this talk.
I already gave a talk about this part of my workflow,
which I've been doing for many years now.
You can find that
or you can find many other people's approaches
to reading literature and taking notes
as it is quite a popular topic in the Emacs community.
Lastly, I will have a short section
about how I ensure that I can recall the knowledge
from this literature very easily
through this reference management system.
So, how can we capture an article in Emacs?
One of the most commonly known packages is doi-utils
where doi-utils has a lot of useful things to do
and one of them is to capture a paper,
but you need a DOI, and for me, that is a bit inconvenient,
because what I want to do is that
I have a URL here of a paper,
I want to just copy this URL, not copy the DOI,
and be able to save it immediately to my bib file.
And that can now be done
through this function zotra-add-entry.
And as you can see here,
there is also a zotra-download-attachment
that sometimes works, but not always.
I don't personally recommend it.
But the problem is that due to articles being
locked behind paywalls in many cases,
downloading attachments doesn't work
through Emacs. Sometimes it doesn't work
through Zotero. Sometimes you just need to go to the browser,
say download PDF, and that's the only solution
that will properly work.
So how do I then add this to the paper?
I need to find this paper that is here
through ivy-bibtex.
This is the bib file manager I use.
There is also others like citar.
I think citar has much better coding and integration
with other packages, but I haven't really bothered
to move from ivy-bibtex
because it does basically everything I want perfectly.
So I go here, say add pdf to library.
I find where I saved it,
and it will suggest to automatically name it something
which is in full integration
with the rest of my Emacs packages,
and all the literature management stuff
knows to find it with this exact name.
So it iss saved and now
when I try to create a file from this,
which I will show later,
you will see that the file will already appear there.
So now let's go to organizing.
Organizing in Zotero is typically done through a
hierarchical folder structure.
This is very familiar to most people and generally works,
but being someone that takes notes using the Zettelkasten method,
which has a fully flat hierarchy, nothing goes in folders,
everything is in the same folder,
and you find everything because it's connected to other things.
We have some basic indexes,
from where you can jump to different points.
I love this structure, so I also wanted to include it
in my bibliography management,
because with folders you have problems like,
this article can go in that folder, can go in that folder,
can go in that folder. Where do I actually put it?
Do I put copies of it in different folders?
It's just confusing and not really practical in my opinion.
So I tried to do this approach inside Emacs.
And how? With Ebib.
Ebib is an amazing software built inside Emacs.
It's a reference manager and it works absolutely amazing
if you configure it to your liking.
So let's open ebib first.
This is the interface you will see when opening.
Actually, by default you will not see anything,
but I have open three bib files.
These are opened by default on boot of ebib for me.
These are my three main master bib files.
This is the Zotero master bib file,
which only Zotero can touch. If I change it,
it will be overwritten. This is my new master bib,
where I save all the files that I have now started using
after switching to this approach.
And then this is the master bib file
for literature related to my PhD
and things that I have already read.
It's a very convenient interface.
There is also search. There is one searching tool,
the jump to entry, ebib-jump-to-entry,
which searches through all open bib files for the title.
So for example, I can search for membrane fabrication,
because that's something I am currently doing,
and go to this. There is another searching tool,
the ebib-search, which searches through the database
that you're on right now
and it does a full text search,
not only in the titles, but everywhere.
So, for example, I see that in this paper
if I go to the abstract and search for the word FTIR,
which is a chemical analysis,
it will tell me that it's here.
Can it find it anywhere else? It cannot. That's okay.
Let's search for something
that we'll be able to find more easily,
like, for example, membrane crystallization
which is a main focus of my PhD.
Then it will be able to find it many times,
many, many times.
I can also search on the next database
or on this database and see where is everything that I want.
So this is different searching tools which are very useful.
Then there's also another tool, that is, filters.
So I can filter on any field.
Like, for example, let's say on any field,
and let's say I'm looking now again
for membrane crystallization.
This will now filter to all entries.
You can see right now there's 18 entries here
that mention these two words together in any field.
Sometimes this is easier, because this is permanent.
It's not like the search that we find one
and then if you move, you've lost it,
and you need to find it again.
This is permanent until I say,
okay, cancel the filter.
I mostly work with filters,
I think they're the most convenient.
Then there's also the ebib-list-recent
which is another very useful command.
It asks you for a number of days
and it will show you the files that were added
in the most recent.
So for example, show me the literature files
that were added to this bib file in the last month.
I will see five files in this case,
because in this bib file, I have mostly entries
that I have read, these are the files
I have most recently read and added here.
While if I go for example here and say that,
these are files that maybe I haven't read yet,
but I was planning to read. So this is something useful.
Although for things I'm planning to read,
I mostly use the reading list
that I'm going to show next.
But before that,
a few more neat things that you can do in Ebib.
So I have a list of dependent databases.
For ease, I have already opened them here.
These, as you can see, have two brackets here,
indicating that they're dependent on phd_literature_1.bib,
and these, in my case, act as the sort of index file,
where I am tagging things based on the structure
that I wanted to have for the organization.
So all the organization is flat,
all the literature is in phd_literature_1,
however, I have this file
that has 14 entries.
I have another file here that has 20 entries.
And these are smaller indexes
where I can find things easier,
but things are not limited to one of these.
Things can be in all of these, or probably not all of these,
but can be in three or four of these very easily.
And how you add things is that I go here,
and I say not r, it's... M for the dependent databases,
and I add entry, and it will tell me
"Where do you want to add this?"
So when I read a new paper,
I can say okay, this is related to these three tags,
and this is sort of like, again,
it's tagging it and it's putting it
there, there, and there.
And then this creates a flat structure
that however has a great organization,
similar to how Zettelkasten works
and I really like working with something like this,
with dependent databases.
Another feature that I really like,
another feature that exists by default... But if I tag,
this tagging is done through "m",
and then I can tag different files here,
and this is to do different actions with these together,
such as, for example,
copy them to a different file,
with "x" I can export the entries somewhere else,
there are many things that you can do
when you mark them.
By the way, one of them is this function,
which sees everything that I have marked
and shows me an org-roam-node-find entry
that is filtered to just these files.
I can select one and it will take me
to my notes on this specific paper.
I find this very useful,
because I can be looking for something
and I can say, okay I remember,
or I did some filtering,
and I know it's in one of these files
and now I want to see my in-depth notes on each one
to remember where exactly I found it.
So I find this kind of filtering,
this org-roam related filtering, to be also very effective.
So now let's finally move to reading list.
The reading list in ebib
reminds me a lot of the philosophy that Emacs uses.
By default, it is extremely bare bones, not very usable,
but it is so customizable, to where you can do
anything that you can imagine through it
because the limit truly is your imagination.
It's how much you can code into this
that actually makes sense
and you can actually imagine it working.
Besides that, you can do anything really.
So we can open ebib and try to find this paper
that I just added here.
Then we can create a reading list entry from it.
Here, my reading list prompts me
for a priority for this.
How urgent it is for me to read this.
It adds a TO-READ, which is a todo entry,
which helps with organizing my reading list,
because as you may also be able to see, this has an ID,
because this is an org-roam node,
so the TO-READ allows me to organize it inside org-roam.
It saves the citekey, the link to the paper,
and also tags it with the parent file node
because I don't like having orphan nodes in my Zettelkasten.
I like everything to be linked to at least one thing.
So everything in the reading list
is linked to the parent file.
And now I can find this in the org-roam-node-find menu,
here. However, that's not very interesting.
In practice, my typical org-roam-node-find
does not even include these reading list files
because I don't really care to have them there.
I have a special org-roam-node-find
that is designed to find these in particular.
And here these have 22. These are the amount of files
that are currently in my reading list.
So for example, let's try and press here.
And magically, this prompts me to select a capture template,
because what it's doing is that I selected this,
and because of the citekey, it knows
that it wants to create a new node for that.
So I select the capture template.
It knows that it wants to create this new node for this.
And now, if I for a second close the reading list,
now I can already go ahead and take notes on this.
This is org-noter, in particular,
and it makes it all very easy
because it's all integrated in one place.
If I then close this and open a new Emacs,
we have this, and the reading list allows me to very quickly
go from this being reading this item to initializing it.
Another thing that is very useful is that
everything is sorted by priority.
So I need to increase the font size again
because I closed the previous Emacs.
So here, I can select what is high priority,
what is low priority. I can also change the priority
without needing to be in this file.
Let's leave this file. I can say, okay, I decided
that this file is priority B. It needs to be A,
which is more urgent.
In my system, there's five different priority levels.
You can get away with less
but I like to have the very much low ones
as this is not urgent at all
but I want to keep it somewhere. A is very urgent
and B is urgent but just below A.
And then the C in the middle is just
I will eventually read this
but not something I want to focus my attention on right now.
So this is mostly about reading list.
I can also show, for example,
I have this if I finalize something,
if I read it. For example, I created a note for this new thing.
Let's say I finished reading it.
I want to remove from my reading list.
It's also just one command and it's done.
If we now return to the presentation,
the last thing I want to show is annotations.
So for annotations, it's the idea that sometimes
you just need to find something in Ebib quickly.
So I'm here and I'm looking for something.
I said I'm here and I'm looking for something.
And as you can see, there's the annote file everywhere,
the annote entry, which is a very very small description
of things that I want to remember for this paper.
So I can be scrolling here or scrolling
in one of the smaller files
and saying this was in this subsection,
and which paper was it, and I can scroll,
read all these annotes.
Each annote takes like 15 seconds to read,
and really decide, okay,
it was this paper that I wanted, good.
Now I can open the note for it, go there, and it's very easy.
So I think that's all. I would like to thank you for your time.
I would love to see your questions either in IRC,
I will be, maybe I've already answered
some of your questions there in the Etherpad,
or right now, we're going to the live Q&A
where I'd love to interact with everyone and have a discussion.
However, if you don't have any questions right now,
but you have a question later on, feel free to send me an email.
My mail is also on the site.
And if you're curious how all this "magic" worked,
feel free to go to my Github and see the ebib section
here that will also be linked in the doc page,
where you can see all the configuration
that I have done in Ebib for everything to work.
Thank you again and have a wonderful EmacsConf!