WEBVTT

00:00.480 --> 00:00:02.639
Hello, everyone. My name is Ahmed

00:00:02.639 --> 00:00:05.279
and I am very happy to be here.

00:05.279 --> 00:00:07.359
Today I'll talk about 

00:00:07.359 --> 00:00:12.160
my academic workflow inside Emacs.

00:12.160 --> 00:00:14.880
So the main needs that I have 

00:00:14.880 --> 00:00:16.880
is to keep up with the current research

00:00:16.880 --> 00:00:19.760
in my field, and to be able 

00:00:19.760 --> 00:00:23.920
to take notes, and write, 

00:00:23.920 --> 00:00:25.359
and use these notes later 

00:00:25.359 --> 00:00:29.439
in writing my papers inside Emacs. 

00:00:29.439 --> 00:00:31.119
Emacs is a great program for this

00:00:31.119 --> 00:00:32.880
because it is very extendable

00:00:32.880 --> 00:00:36.960
and we can basically write

00:00:36.960 --> 00:00:39.440
whatever we are missing.

00:39.440 --> 00:00:41.360
It replaced my earlier 

00:00:41.360 --> 00:00:42.559
proprietary workflow

00:00:42.559 --> 00:00:44.320
that involved using Mendeley

00:44.320 --> 00:00:46.320
and Visual Studio Code

00:00:46.320 --> 00:00:47.760
and many other tools 

00:00:47.760 --> 00:00:49.760
in order to do the things

00:00:49.760 --> 00:00:51.759
that I'll show today.

00:51.760 --> 00:00:54.480
So the first concern that I have 

00:00:54.480 --> 00:00:57.280
is to keep up with new papers. 

00:00:57.280 --> 00:01:02.399
To do that, I use this package called elfeed.

01:02.399 --> 00:01:05.760
Elfeed is basically just an RSS reader,

01:05.760 --> 00:01:09.600
and here I fetch all the papers that I need

00:01:09.600 --> 00:01:12.159
from arXiv, which is the main source 

00:01:12.159 --> 00:01:14.080
of papers in my field 

00:01:14.080 --> 00:01:16.720
and many other scientific fields.

01:16.720 --> 00:01:22.640
It allows me to view these papers

00:01:22.640 --> 00:01:27.680
with the abstracts and so on.

01:27.680 --> 00:01:32.159
In order to simplify viewing 

00:01:32.159 --> 00:01:34.799
and searching for relevant papers, 

00:01:34.799 --> 00:01:36.400
I used this other package called

00:01:36.400 --> 00:01:41.600
elfeed-score, and elfeed-score enables me

00:01:41.600 --> 00:01:44.560
to assign a numerical score like this

00:01:44.560 --> 00:01:47.600
to each of the arXiv entries.

00:01:47.600 --> 00:01:49.200
This numerical score is very simple. 

00:01:49.200 --> 00:01:52.560
It's just based on matching things. 

00:01:52.560 --> 00:01:59.200
So, for example, we can ask elfeed

01:59.200 --> 00:02:05.040
to explain this. So if we say = x,

02:05.040 --> 00:02:08.720
then this just says that

00:02:08.720 --> 00:02:10.000
this matches three rules 

00:02:10.000 --> 00:02:12.720
for a score of 76. This paper. 

00:02:12.720 --> 00:02:14.959
This is simply because I am searching 

00:02:14.959 --> 00:02:16.800
for these keywords

00:02:16.800 --> 00:02:19.040
that are very interesting to me,

00:02:19.040 --> 00:02:20.879
such as neural networks

00:02:20.879 --> 00:02:22.879
or federated learning. 

00:02:22.879 --> 00:02:28.959
And now, if I see a paper here 

00:02:28.959 --> 00:02:30.238
that I am interested in... 

00:02:30.239 --> 00:02:32.720
Let's say I'm interested in this paper

00:02:32.720 --> 00:02:35.040
about Gaussian Process Inference,

02:35.040 --> 00:02:36.640
then I want to store it

00:02:36.640 --> 00:02:40.160
in my local library. So I want the PDF

00:02:40.160 --> 00:02:41.920
and I want to be able to cite it

00:02:41.920 --> 00:02:44.000
in the future. To do that, 

00:02:44.000 --> 00:02:46.080
I use a package called org-ref 

00:02:46.080 --> 00:02:54.640
that allows me to fetch papers from arXiv. 

00:02:54.640 --> 00:02:56.720
So here I wrote a helper function,

00:02:56.720 --> 00:02:59.200
this elfeed-entry-to-arxiv

02:59.200 --> 00:03:02.480
that automatically gets this paper. 

00:03:02.480 --> 00:03:03.840
It asks me where to put it,

00:03:03.840 --> 00:03:07.840
it completes with my default libraries,

03:07.840 --> 00:03:13.360
and then it fetches the paper from arXiv

03:13.360 --> 00:03:16.159
and places it in this folder,

00:03:16.159 --> 00:03:20.000
and also places it in my bibliography file

00:03:20.000 --> 00:03:23.280
which is written in BibLaTex.

03:23.280 --> 00:03:30.239
So here, if we search for this paper now,

03:30.239 --> 00:03:35.200
we find that it is in our library.

03:35.200 --> 00:03:38.000
This library interface 

00:03:38.000 --> 00:03:41.280
is from a package called citar, 

00:03:41.280 --> 00:03:44.000
and I have customized it quite a bit

00:03:44.000 --> 00:03:48.879
to display all of the papers in my library 

03:48.879 --> 00:03:50.559
in this format.

03:50.560 --> 00:03:55.439
This just reads from a BibLaTeX file. 

00:03:55.439 --> 00:03:59.519
So if we open it like this,

03:59.519 --> 00:04:02.879
you'll see that this is the

04:02.879 --> 00:04:06.640
the entry that it placed.

04:06.640 --> 00:04:10.959
One of the interesting things here is that

04:10.959 --> 00:04:13.519
org-ref actually doesn't really fetch

00:04:13.519 --> 00:04:16.079
all of the entries in this format. 

00:04:16.079 --> 00:04:18.639
Moreover, I want all the entries in my file

00:04:18.639 --> 00:04:20.160
to look quite similar,

04:20.160 --> 00:04:23.520
and to have this very similar look,

04:23.520 --> 00:04:25.440
and the way I accomplish that is by

00:04:25.440 --> 00:04:28.960
using several tools and chaining them.

04:28.960 --> 00:04:37.280
So in order to see this...

04:37.280 --> 00:04:39.600
So here, this is the function

04:39.600 --> 00:04:41.680
that I used to...

04:41.680 --> 00:04:46.720
This is basically run as a hook after each time

04:46.720 --> 00:04:49.680
Emacs modifies the bibliography file,

04:49.680 --> 00:04:52.320
and it runs rebiber 

00:04:52.320 --> 00:04:56.479
which gets the conference versions 

00:04:56.479 --> 00:04:58.320
of papers that I fetch from arXiv, 

00:04:58.320 --> 00:05:00.800
because arXiv is a preprint directory,

05:00.800 --> 00:05:05.360
and then biber normalizes the arXiv file

05:05.360 --> 00:05:07.919
to have a consistent look, 

00:05:07.919 --> 00:05:10.320
and then I apply just some substitutions 

00:05:10.320 --> 00:05:12.960
which I like more.

05:12.960 --> 00:05:14.560
Finally, I have the whole thing 

00:05:14.560 --> 00:05:16.639
under version control.

05:16.639 --> 00:05:20.000
This function, reformat-bib-library,

00:05:20.000 --> 00:05:21.840
I make it into a hook

00:05:21.840 --> 00:05:24.720
and I run it every time after I save.

05:24.720 --> 00:05:27.039
It just checks if the current buffer

05:27.039 --> 00:05:29.039
is the main bib library. 

00:05:29.039 --> 00:05:31.840
We will just reformat the library. 

00:05:31.840 --> 00:05:33.680
This allows me to keep the library

00:05:33.680 --> 00:05:37.199
looking all consistent like this.

05:37.199 --> 00:05:39.120
By the way, all of the code is available.

05:39.120 --> 00:05:40.880
You don't have to get it from the video.

05:40.880 --> 00:05:44.479
I will attach it as a GitHub gist.

05:48.720 --> 00:05:49.919
One of the things 

00:05:49.919 --> 00:05:51.520
that are really important 

00:05:51.520 --> 00:05:54.080
is that I want to be able to keep notes

00:05:54.080 --> 00:05:56.160
on papers that I read.

05:56.160 --> 00:05:58.479
For example, here are some of 

00:05:58.479 --> 00:06:00.319
my existing notes.

06:00.319 --> 00:06:04.720
Now, let's add a note to the paper 

00:06:04.720 --> 00:06:06.080
that we just got.

00:06:06.080 --> 00:06:08.800
So the the pipeline here is that 

00:06:08.800 --> 00:06:12.080
I use citar with embark,

06:12.080 --> 00:06:13.199
which is another library, 

00:06:13.199 --> 00:06:15.600
but you can use any other library 

00:06:15.600 --> 00:06:17.039
just for completion 

00:06:17.039 --> 00:06:19.600
and acting upon completion, like ivy,

06:19.600 --> 00:06:21.360
and I ask it to open notes 

00:06:21.360 --> 00:06:23.680
and then it asks me how to capture it. 

00:06:23.680 --> 00:06:25.120
So these capture templates 

00:06:25.120 --> 00:06:27.440
are handled by the org-roam package,

00:06:27.440 --> 00:06:30.400
which is a very, very interesting package

00:06:30.400 --> 00:06:32.560
for note-taking.

06:32.560 --> 00:06:36.160
org-roam, among other things, allows us

00:06:36.160 --> 00:06:38.800
to write linkable notes in Org mode,

06:38.800 --> 00:06:42.400
and moreover, it is very extensible.

06:42.400 --> 00:06:45.600
There is another package called org-roam-bibtex 

00:06:45.600 --> 00:06:47.840
that allows us to attach these nodes

00:06:47.840 --> 00:06:50.000
to bibliography files, 

00:06:50.000 --> 00:06:51.919
which is what I'm doing right now.

06:51.919 --> 00:06:54.800
For example, I set up the capture template

00:06:54.800 --> 00:06:57.680
such that when I press s 

00:06:57.680 --> 00:07:01.440
for short bibliography reference,

07:01.440 --> 00:07:04.800
it will make a new headline

07:04.800 --> 00:07:08.479
in my "Reference Notes" note,

07:08.479 --> 00:07:10.479
and I can write things here

00:07:10.479 --> 00:07:14.960
(so, for example, "seems interesting")

07:14.960 --> 00:07:18.000
and then note here that it added this paper

00:07:18.000 --> 00:07:24.319
to ROAM_REFS, so this means that

07:24.319 --> 00:07:26.720
when I look at these papers using citar,

07:26.720 --> 00:07:30.319
it will be able to find this note.

07:30.319 --> 00:07:34.000
Similarly, we can also add long-form notes. 

00:07:34.000 --> 00:07:37.199
For example, if I do this and I add r,

07:37.199 --> 00:07:39.840
it will create an entirely new file 

00:07:39.840 --> 00:07:48.000
that I can take detailed notes in.

07:48.000 --> 00:07:50.639
The strengths of org-roam is that 

00:07:50.639 --> 00:07:53.520
I can do things like linking papers.

07:53.520 --> 00:07:55.360
For example, here are several books

07:55.360 --> 00:08:00.000
that I am reading. This file just collects

00:08:00.000 --> 00:08:02.319
these books so that I can find them

00:08:02.319 --> 00:08:03.919
for easy reference.

08:03.919 --> 00:08:07.599
Of course, I can link these files from inside.

08:07.599 --> 00:08:13.759
You can see here that I also use org-cite

08:13.759 --> 00:08:18.720
to cite other files, and I can act upon this

08:18.720 --> 00:08:21.199
and open the notes corresponding to 

00:08:21.199 --> 00:08:28.240
this other book.

08:28.240 --> 00:08:30.319
So I'm a little short on time. 

00:08:30.319 --> 00:08:32.719
I cannot go into detail on everything, 

00:08:32.719 --> 00:08:34.560
but I will share my configuration,

00:08:34.560 --> 00:08:37.919
and I hope that this will inspire other people

00:08:37.919 --> 00:08:43.919
to also use Emacs for their academic workflows.

08:43.919 --> 00:08:44.919
Thank you so much.

00:08:44.919 --> 00:08:47.279
[captions by sachac]