My biggest problem in college (besides passing the classes) was always taking notes in class. I’m the type of person that likes to write absolutely everything that the professor says down just in case any obscure detail of a forgotten class comes up on the test.

In very little time I realized that writing everything down in paper was too inefficient. Aside from how tiresome copying all those formulas on the blackboard is, a lot of professors are too disorganized for it to be possible to take notes linearly of what is happening in class. Cast the first stone anyone who never gave up on taking notes in a class because their professor had made a mistake two blackboards before.

Possible solutions

The first thing that every student things of in these moments of anger is in taking notes on their computer (if they have one). For one second this sounds like the perfect solution, but it almost never works; if you’re not a STEM major a regular text editor like Word or Pages might work for you just fine, mas if you have to copy an equation these programs already become a less than ideal solution.

Since I’m a Computer Science major there is yet another problem: writing down code. Talking to my friends, we got to the conclusion that taking notes in LaTeX may be the only way out. Having said this, I encourage the reader to try to take notes of at least one class in LaTeX to understand why I’m rejecting this idea…

With this I figured there were three boxes any solution should check before being considered optimal:

  • Practicality (paper’s major downside)
  • Easiness of writing equations and code (common text editor’s major downside)
  • Speed (LaTeX’s major downside)

It was not going to be easy…

A light at the end of the tunnel

After much time looking for an ideal solution, I ended up finding it right under my nose. I had already been using a code/text editor for some time called Atom, but what I had yet to find out was that this editor is extremely customizable, allowing the user to download certain plugins whose function is extending the editor’s functionality.

One of these plugins is called Markdown Preview Plus (MMP) and it was a light at the end of the tunnel that was my notebook. It takes advantage of two polar opposite technologies in a way that we get the best of both worlds! For text and code it allows us to use Markdown, while for equations it allows us to use LaTeX (but without the text formatting stuff that made any pure LaTeX solution slow and inefficient).

Reading these two words together in the same sentence might feel intimidating, but believe me when I say that it saved my life. I can’t say that there isn’t a learning curve, but the pros outweighs the few days you’re going to spend learning Markdown or LaTeX.

How to install MMP

For everything to work, you first need to install Atom. Having done this, go to the editor’s menu and look for an option called Install and also install Markdown Preview Plus. The last step is going to the Packages menu, looking for MPP and, in its configurations, enabling the option Enable Math Rendering By Default.

Create a .md file and press ctrl + shift + M to active MMP’s preview feature. Now just write in Markdown and add any LaTeX code between two dollar signs to render any math formula!

In theory that’s all 😊 This solution unites the practicality of the computer, LaTeX’s functionalities and Markdown’s speed in a way that I never imagined was possible. But for those who don’t know neither LaTeX nor Markdown there is still the challenge of learning how to use them…

Examples

To learn more about Markdown, I suggest a tutorial created by GitHub: Mastering Markdown. LaTeX doesn’t exactly need a tutorial in our case, just a cheat sheet: LaTeX/Mathematics.

For an illustrative example, see the code below (in Portuguese):

# Matéria Importante

## Aula de hoje

Com Markdown podemos criar
- *Uma lista*
- `Com itens`
- **Em diversas**
- formatações

Seja $X$ o número de comparações executadas na linha 4 da função
`particione()`. Observe que $X$ é uma variável aleatória.
Tome $X_{ab}$ a variável aleatória binária com interpretação
$X_{ab} = 1$ se e somente se $a$ e $b$ são comparados na linha 4.

Algo bem complicado (e sem sentido):

$m = \begin{cases}
    m[i, j] = n + \sum_{k = 0}^{\lfloor \lg n \rfloor} 2^k = n +
    2^{\lfloor \lg n \rfloor} - 1 ≤ n + 2.2^{\lg n} & i = j \\
    m[i, j] = min_{\ i ≤ k ≤ j-1}\{ m[i, k] + m[k+1, j] +
    p_{i-1} \ p_k \ p_j\} & i \not = j
\end{cases}$

This is the result as rendered by MMP

Bonus functionalities

If you want to maximize the speed with which you write things down, I suggest using Atom’s snippets. The ones I use are available as a Gist.

To export your notes as a PDF, right-click MPP’s preview and select Save as HTML. This file can be opened in you browser and then saved as a PDF with cmd/ctrl + P.