makecourse: a set of bash commands to automate professional teaching materials

Github
github page

The project's Github pages

View
Demo of the results
Example website

See the results on this website

View

What?

makecourse a cli tool for bash to take templates in LaTeX, merge them with the content, compile it to slides, then do the same for the handouts, and finally create a website to host the materials. All in one go.

It assumes the following concepts

lecture
one presentation, it has course materials such as slides, handouts, exercises, etc.
course
a set of lectures
school
the institute that lends its name, logo, layout, etc. to the presentations and handouts
website
the presenter has a website that lists all courses, with all lectures and all materials. We assume that this website is a Mynt generated static website. However, all we do is putting files into given directories, which allows you to simply create a directory of files that you upload to your institution's website.

makecourse requires you to first understand and configure the following files:

config.sh
the overarching configuration such as where the courses are, where the website files are, which courses are active, etc.
config_courses.sh
defines the layout of each course, which lectures it contains and customisation for its web-page (eg. the agenda of the course)
config_lectures.sh
for each lecture it defines basic information such as which are the input files, how to compile it (LaTeX with biber, RMarkdown, multiple markups, etc.)

Why?

I like teaching, but it is not my main profession, so I wanted to optimise the time spent on preparing classes and optimise the quality of materials for the students

Using makecourse I can now prepare a full set of materials for a course in minutes if there are no updates on the content. There is only one source that produces both slides and handouts

The system has the following advantages:

  1. one base file can be used to produce slides and lecture notes (the lecture notes typically have much more text, but the common core is exactly the same)
  2. one base file can be used in multiple courses and hence appear branded in multiple ways.
  3. It uses only free software: Linux, Bash, and a choice of markup languages such as LaTeX and RMarkdown
  4. easy to use cli tool, just one command to create all materials for all lectures of a course
  5. consistent branding and layout for slides and handouts
  6. automatic generation of a website with all materials
  7. flexible templates, easy to adapt to your own needs
  8. open source, so you can modify it as you see fit
A cool fact is that while Bash is not object oriented, I managed to mimic basic OO functionality by encapsulating class information in the name of the objects.

Can I see examples?

Sure, I have regularly some materials online and it is part of this website in the section courses.

Where is more information?

This should work after customising config files. There is no further user support.

Note that you will need: Linux with installed LaTeX and/or RMarkdown. If you want to automate the generation of the website, you will need to customise the relevant functions in the file functions.sh

Finally, you can ask the executables to explain themselves how they should be used with the -h command-line option.

1
2
3
4
5
6
7
8
9
# create website, slides, handouts, and other materials 
# for all lectures in a course
./makecourse.sh -h       

# create the overview web-page, and eventually all materials:
./makeallcourses.sh -h

# create an overview of all possible courses (not necessarily active):
./makeoverview.sh -h

Finally, you will need a directory latex.inc in which you store the beamer templates, cls files, etc. for the slides and handouts. The logos can be stored in a directory img/.

Stay informed

Follow Philippe at

Change Log

0.1.1
2025-03-09 -- added the functionality to produce an oversight of possible courses (not necessarily active)
0.1.0
2023-02-29 -- fully functional an in use
0.0.1
2023-01-26 -- first version on functional version