[ANN] PlutoTeachingTools.jl: A collection of functions to use with Pluto for tutorials, presentations, lab assignments,

I’m happy to announce PlutoTeachingTools.jl, a collection of small functions to make it quick and easy to enhance tutorials, lab/homework assignments, and presentations. The best way to see what it could do for you is to check out the example notebook.

Examples of useful functions included:

  • commons alert boxes (correct(), almost(md), keep_working(), still_missing(), hint(md))
  • common error boxes (var_not_defined(sym), func_not_defined(sym))
  • Foldable(str,md), protip(md) and aside(md) for extra information or tangents
  • latexify_md(var) and wrap_tex(str) for including \LaTeX-formatted expressions in markdown
  • TwoColumn(l,r) and ThreeColumn(l,c,r) for comparing figures, equations, code blocks, etc.
  • ChooseDisplayMode() providing checkboxes to enter/leave Full Width Mode and/or Presentation mode
  • rexporting @ingredients from PlutoLinks.jl for including include code from a local file, module.

Why put these in a package?

By putting these functions into a package

  • Students are less likely to be distracted by UI code that’s not intended to be part of the current lesson.
  • Instructors don’t have to copy and paste so much.
  • Notebooks are smaller and load more quickly (thanks to precompilation)
  • Others can contribute to improving code and adding new functionality.
  • If a new version of Pluto changes something that breaks one of the HTML/CSS hack, then it’s easier to update old notebooks by updating PlutoTeachingTools, than by manually updating code in notebook.


I found an earlier version of this package useful during a previous semester and hope it’s useful to others. I encourage others to improve and/or contribute new functions that are of value to other educators. PRs are welcome. I’ll aim to merge clean PRs that fix bugs, add/improve documentation and/or add new features on a rolling basis. However, I will try to hold off on any PRs that would result in breaking changes until mid-December (i.e., after my Fall semester ends) and again between mid-January and mid-May. In any case, please be patient, as this is merely a side project.


A bit thanks to Fons and the other developers of Pluto.jl.
Many functions are merely code borrowed from modules and/or homework assignments from the excellent MIT course, Introduction to Computational Thinking
Math (Spring 2021)
. Other functions were adapted from various open-source packages and discussions in various issues pull requests (see code comments for specific credits).