WEBVTT
00:00.799 --> 00:02.560
Hi! My name is Asilata Bapat,
00:02.560 --> 00:04.960
and I'm talking about Babel for academics.
00:04.960 --> 00:06.879
So, I'm an academic at a university,
00:06.879 --> 00:09.040
and I use Emacs, Org mode, and Babel
00:09.040 --> 00:11.280
for a whole bunch of work related tasks.
00:11.280 --> 00:12.559
And there are many other tools
00:12.559 --> 00:14.240
that one could use to help with
00:14.240 --> 00:15.200
this workflow.
00:15.200 --> 00:16.597
I won't be going through all of these,
00:16.597 --> 00:18.160
and the ones that I've listed are just
00:18.160 --> 00:20.240
a few of the many that are available.
00:20.240 --> 00:22.000
Today, I'll really be talking about
00:22.000 --> 00:24.080
my teaching workflow.
00:24.080 --> 00:27.840
Let's just dive right in to a demo.
00:27.840 --> 00:29.243
So, the first file that I want to
00:29.243 --> 00:31.599
show you is the notes and admin file.
00:31.599 --> 00:33.040
From this file, I'll generate
00:33.040 --> 00:35.440
a nice-looking PDF document of notes,
00:35.440 --> 00:36.963
and I'll also keep track of some
00:36.963 --> 00:38.399
course admin.
00:38.399 --> 00:43.200
So, the file that I have here is this one,
00:43.200 --> 00:44.719
and all of the files that I'm going to
00:44.719 --> 00:46.320
show you today are taken from a course
00:46.320 --> 00:48.096
that I'm teaching at the moment
00:48.096 --> 00:49.680
this semester.
00:49.680 --> 00:53.147
What I want to do is export this
00:53.147 --> 00:55.520
entire document to LaTeX
00:55.520 --> 00:56.320
because this is where
00:56.320 --> 00:58.800
I'll be writing my course notes.
00:58.800 --> 01:00.480
But before I do that,
01:00.480 --> 01:03.199
I have some setup that I want to do,
01:03.199 --> 01:05.199
and you'll notice some of these headings
01:05.199 --> 01:06.509
are tagged as noexport,
01:06.509 --> 01:08.400
and they won't be exported.
01:08.400 --> 01:11.680
The startup setting I'll skip,
01:11.680 --> 01:13.499
and then the main thing here
01:13.499 --> 01:14.880
is the LaTeX setup.
01:14.880 --> 01:18.560
So, I'm using these #+ option lines,
01:18.560 --> 01:21.360
and I've told Org that
01:21.360 --> 01:23.280
I want to use an unusual LaTeX class,
01:23.280 --> 01:24.880
I'll have to tell Org about it later,
01:24.880 --> 01:26.240
I'll do that in a moment,
01:26.240 --> 01:27.001
and I have some
01:27.001 --> 01:29.600
LaTeX header lines, and so on.
01:29.600 --> 01:31.360
And then I have some export settings,
01:31.360 --> 01:32.941
the first export setting is
01:32.941 --> 01:35.119
to export into a different directory,
01:35.119 --> 01:36.799
not just at the same level
01:36.799 --> 01:38.560
because I want everything to go into
01:38.560 --> 01:39.716
the artifacts directory,
01:39.716 --> 01:41.360
and then I can ignore that artifacts
01:41.360 --> 01:44.399
directory using Git.
01:44.399 --> 01:45.600
This is the first
01:45.600 --> 01:47.280
source code block that we see,
01:47.280 --> 01:49.759
which is the Babel side of things,
01:49.759 --> 01:52.079
and I've called it export-setup.
01:52.079 --> 01:55.759
The way I write it is, #+begin_src,
01:55.759 --> 01:56.965
the language that I want to use,
01:56.965 --> 01:58.159
which is emacs-lisp,
01:58.159 --> 01:59.600
and maybe some options,
01:59.600 --> 02:01.119
and this is collapsed at the moment,
02:01.119 --> 02:03.600
if I expand it, you'll see
02:03.600 --> 02:05.155
inside here, this is really
02:05.155 --> 02:07.600
just Elisp, Emacs Lisp.
02:07.600 --> 02:09.592
So, the first thing I've done is,
02:09.592 --> 02:12.440
I've added this LaTeX class
02:12.440 --> 02:15.360
to the list of known LaTeX classes.
02:15.360 --> 02:17.433
And the second thing I've done is,
02:17.433 --> 02:19.599
I have locally set the value of
02:19.599 --> 02:21.112
org-latex-pdf-process,
02:21.112 --> 02:24.720
which is the compiler, to something…,
02:24.720 --> 02:27.200
this command is complicated I guess,
02:27.200 --> 02:29.440
but what the main thing it's doing
02:29.440 --> 02:32.160
is that it's moving the generated output…,
02:32.160 --> 02:34.160
sorry, the generated image files
02:34.160 --> 02:35.169
to the output directory,
02:35.169 --> 02:37.519
so that everything can remain
02:37.519 --> 02:39.680
inside of this artifacts directory,
02:39.680 --> 02:41.519
and maybe it's doing some other things.
02:41.519 --> 02:43.680
And then there are some other
02:43.680 --> 02:47.120
setup options that I'll skip.
02:47.120 --> 02:49.360
So, this is a source code block,
02:49.360 --> 02:50.640
inside of the source code block
02:50.640 --> 02:52.319
everything is basically Emacs Lisp.
02:52.319 --> 02:54.640
How do I evaluate this?
02:54.640 --> 02:56.319
I just press Control c Control c (C-c C-c),
02:56.319 --> 02:57.920
and it evaluates everything,
02:57.920 --> 03:00.319
but if I want to automate the evaluation,
03:00.319 --> 03:02.080
there's one other thing I can do.
03:02.080 --> 03:04.658
So, let me jump down to
03:04.658 --> 03:06.720
the local variables section.
03:06.720 --> 03:09.740
In this local variable section
03:09.740 --> 03:11.680
I have an eval block,
03:11.680 --> 03:14.681
so, I've added a certain hook to the
03:14.681 --> 03:16.879
org-export-before-processing-hook,
03:16.879 --> 03:18.319
and that just resolves
03:18.319 --> 03:19.519
this reference from this file.
03:19.519 --> 03:23.040
It looks for a code block titled
03:23.040 --> 03:24.859
export-setup, and it runs it
03:24.859 --> 03:26.000
right before exporting,
03:26.000 --> 03:29.200
and this is all local to this buffer.
03:29.200 --> 03:30.799
So, before I export,
03:30.799 --> 03:34.000
it'll then read the correct options.
03:34.000 --> 03:37.519
And after this setup,
03:37.519 --> 03:39.760
I have the course plan,
03:39.760 --> 03:41.599
which is just what goes into my agenda
03:41.599 --> 03:43.360
as to-dos, I'll skip that.
03:43.360 --> 03:45.519
And after that, I have the actual notes,
03:45.519 --> 03:48.640
and what they actually look like…,
03:48.640 --> 03:54.400
so, this is what they actually look like,
03:54.400 --> 03:57.040
nicely LaTeXed with diagrams and so on,
03:57.040 --> 03:57.920
everything generated
03:57.920 --> 04:00.720
from that single Org file.
04:00.720 --> 04:04.480
I'll say more about diagrams later.
04:04.480 --> 04:06.080
I also have to write assignments
04:06.080 --> 04:07.260
and assignment solutions,
04:07.260 --> 04:10.239
so let me jump to that.
04:10.239 --> 04:11.840
Again, this is a very similar file,
04:11.840 --> 04:14.080
but I want to now export
04:14.080 --> 04:15.760
different headings to different files.
04:15.760 --> 04:16.639
This is not going to be
04:16.639 --> 04:18.320
exported all at once.
04:18.320 --> 04:19.759
So, again I have some setup,
04:19.759 --> 04:22.400
some general setup that I'll skip,
04:22.400 --> 04:25.120
export setup just like before,
04:25.120 --> 04:29.280
code setup for Python, really,
04:29.280 --> 04:31.280
I have a various…, a bunch of different
04:31.280 --> 04:33.199
languages here, so Shell and Python,
04:33.199 --> 04:35.967
and some helper functions.
04:36.088 --> 04:38.160
So, let me jump to this one called
04:38.160 --> 04:39.756
togglesolutions, this is again
04:39.756 --> 04:41.919
an Emacs Lisp code block.
04:41.919 --> 04:43.600
What this does is,
04:43.600 --> 04:48.632
it tells LaTeX to either toggle the
04:48.632 --> 04:50.336
display of solutions on, or off
04:50.336 --> 04:53.096
based on what the tag is
04:53.096 --> 04:54.240
for that particular assignment.
04:54.240 --> 04:57.520
So, whether if the assignment
04:57.520 --> 04:58.800
is tagged as solved,
04:58.800 --> 05:00.240
then the solution should be displayed,
05:00.240 --> 05:03.280
otherwise they shouldn't be.
05:03.280 --> 05:05.447
And here most of the assignments
05:05.447 --> 05:07.120
are tagged as solved,
05:07.120 --> 05:08.880
so in this case if I export this,
05:08.880 --> 05:11.840
the solutions will be displayed.
05:11.840 --> 05:20.800
Let's look at that.
05:20.800 --> 05:23.919
So, I see the solutions blocks,
05:23.919 --> 05:27.036
and this is because it's calling
05:27.036 --> 05:29.919
the toggle solutions piece of code.
05:29.919 --> 05:32.240
And the properties,
05:32.240 --> 05:33.840
if I expand this properties drawer,
05:33.840 --> 05:39.280
you see this output file name
05:39.280 --> 05:41.440
has a homework one dash solved,
05:41.440 --> 05:43.360
so it has a solved suffix,
05:43.360 --> 05:45.912
and this is related to the fact that
05:45.912 --> 05:47.680
I have a solved tag up here.
05:47.680 --> 05:48.960
So, let's see what happens
05:48.960 --> 05:51.199
if I delete the solved tag,
05:51.199 --> 05:52.639
so nothing's happened yet,
05:52.639 --> 05:54.000
but if I save the file,
05:54.000 --> 05:55.919
then suddenly this homework one
05:55.919 --> 05:58.240
dash solved becomes homework one,
05:58.240 --> 06:00.080
and this is desired behavior,
06:00.080 --> 06:02.084
this is what I want because
06:02.084 --> 06:03.222
I want to keep the solved
06:03.222 --> 06:04.497
and unsolved files separate.
06:04.497 --> 06:07.120
So, once again, if I put in
06:07.120 --> 06:09.440
the solved tag, and if I save,
06:09.440 --> 06:11.440
I get back the different file name.
06:11.440 --> 06:12.720
And how did I achieve this?
06:12.720 --> 06:16.479
This is again back in the setup section,
06:16.479 --> 06:19.280
it's the process-export-filenames block.
06:19.280 --> 06:21.120
It's some big piece of Elisp
06:21.120 --> 06:22.349
that I won't go through,
06:22.349 --> 06:24.240
but basically it's mapping over
06:24.240 --> 06:26.720
Org entries, and it's either
06:26.720 --> 06:30.080
adding or removing this solved suffix
06:30.080 --> 06:34.560
based on what tag it sees.
06:34.560 --> 06:36.781
Okay, when does this
06:36.781 --> 06:37.919
code block get evaluated?
06:37.919 --> 06:39.840
Well, I want it to be evaluated
06:39.840 --> 06:41.039
right before I save
06:41.039 --> 06:43.199
because I change something,
06:43.199 --> 06:45.840
I save, and I want the properties
06:45.840 --> 06:49.199
to be get updated accordingly.
06:49.199 --> 06:51.364
If I go down to the
06:51.364 --> 06:52.639
local variables section again.
06:52.639 --> 06:55.840
Again, I have a local variables
06:55.840 --> 06:56.800
section here,
06:56.800 --> 06:58.479
and I'm evaluating this Elisp,
06:58.479 --> 07:01.199
which is setting the before-save-hook
07:01.199 --> 07:04.240
to resolve the process-export-filenames
07:04.240 --> 07:05.716
function, and so that's what
07:05.716 --> 07:09.199
gives me that functionality.
07:09.199 --> 07:12.720
And finally,
07:12.720 --> 07:16.240
I have some skeletons, which are….
07:16.240 --> 07:19.360
Emacs has this skeleton language,
07:19.360 --> 07:22.240
which is a rudimentary templating language.
07:22.240 --> 07:24.220
So, I've defined some templates
07:24.220 --> 07:26.319
for my assignment and worksheet
07:26.319 --> 07:29.440
in this little Emacs Lisp block,
07:29.440 --> 07:31.120
which I think I usually just evaluate
07:31.120 --> 07:33.280
manually, and then if I just call it,
07:33.280 --> 07:35.199
I get a nice-looking skeleton
07:35.199 --> 07:37.360
that gives me this assignment.
07:37.360 --> 07:40.080
One thing I want to show you
07:40.080 --> 07:43.199
in these assignments, or I mean,
07:43.199 --> 07:44.720
in this file in particular,
07:44.720 --> 07:46.560
are these dot source code blocks.
07:46.560 --> 07:49.840
So, I've had to type in or draw in
07:49.840 --> 07:52.000
some graphs in this assignment,
07:52.000 --> 07:54.720
and I can do that right from Org.
07:54.720 --> 07:56.400
So, this is some piece of code
07:56.400 --> 07:59.199
that's creating a file,
07:59.199 --> 08:00.879
which has this name,
08:00.879 --> 08:05.840
and if I evaluate this block,
08:05.840 --> 08:10.720
I see a results drawer with this file.
08:10.720 --> 08:12.711
And this is a PNG file,
08:12.711 --> 08:13.759
which now gets embedded
08:13.759 --> 08:15.680
into my LaTeX document.
08:15.680 --> 08:16.639
So, this is nice,
08:16.639 --> 08:18.720
I can actually delete this from here,
08:18.720 --> 08:20.479
and when I export,
08:20.479 --> 08:23.919
the file will get attached automatically.
08:23.919 --> 08:26.639
And similarly,
08:26.639 --> 08:28.800
in some other assignments here,
08:28.800 --> 08:30.639
I have some Python source,
08:30.639 --> 08:33.284
so I've had to type in
08:33.284 --> 08:34.527
some complicated matrices,
08:34.527 --> 08:36.128
and some complicated matrix products,
08:36.128 --> 08:36.640
and so on,
08:36.640 --> 08:38.000
which I didn't want to do by hand,
08:38.000 --> 08:39.760
so that I didn't introduce errors,
08:39.760 --> 08:41.599
so I've written some Python code.
08:41.599 --> 08:44.240
If I Control c Control c (C-c C-c)
08:44.240 --> 08:45.920
on this block, you'll notice,
08:45.920 --> 08:47.120
it's in the session matrix,
08:47.120 --> 08:49.200
so it's using the previous,
08:49.200 --> 08:52.399
the same kind of session.
08:52.399 --> 08:55.440
And you'll see that the results,
08:55.440 --> 08:57.760
because of the way I chose to format them,
08:57.760 --> 08:59.920
look like a nice drawer with
08:59.920 --> 09:01.600
nicely formatted LaTeX.
09:01.600 --> 09:03.920
Once again these results
09:03.920 --> 09:05.519
I can cut from the file,
09:05.519 --> 09:07.600
and the file will get exported…,
09:07.600 --> 09:09.200
when the file gets exported,
09:09.200 --> 09:10.480
these source code blocks will get
09:10.480 --> 09:12.000
evaluated, and the answer
09:12.000 --> 09:19.200
will show up in the file.
09:19.200 --> 09:20.097
And finally,
09:20.097 --> 09:21.363
the last thing I want to show you
09:21.363 --> 09:23.531
very briefly is the web page
09:23.531 --> 09:26.720
for this course.
09:26.720 --> 09:28.399
The only thing I want to show you here
09:28.399 --> 09:30.399
is that I have a Python source code block,
09:30.399 --> 09:33.279
which pulls in my handwritten course notes,
09:33.279 --> 09:36.399
and makes them into a nice-looking list
09:36.399 --> 09:38.880
with a nice-looking order,
09:38.880 --> 09:41.680
and then just exports as HTML.
09:41.680 --> 09:44.600
So, this is what
09:44.600 --> 09:46.080
the web page looks like,
09:46.080 --> 09:48.880
and you can see it at this URL.
09:48.880 --> 09:49.892
If you go click on
09:49.892 --> 09:52.800
the 2021 link at this URL.
09:52.800 --> 09:54.880
So, that's all that I wanted to say.
09:54.880 --> 09:58.360
Thank you very much!