LaTeX Stuff



Many logicians have a section on their homepage where they offer unsolicited remarks about LaTeX. Here are my unsolicited remarks about LaTeX.

LaTeX Projects

My love for LaTeX started in 2016, when Bas van Fraassen asked me to digitize his Formal Semantics and Logic, which was quite a task. Of course, if I were to do it today I would do it differently. I still have the source files somewhere, but I am afraid to look back at them. What a project to learn LaTeX with. Perhaps at some point I should put the project on GitHub.

And here are some other things I’ve done since then: I have a few other little projects/experiments in the works, but they’re currently in private repositories. I’m happy to share in person, but also, some will likely be made public soon enough—when I am less embarrassed about their condition.

LaTeX Workflows

I have a fairly advanced LaTeX workflow, about which I have sometimes been asked. I here offer some remarks that may be of use to someone either getting started or thinking about modifying their workflow.

Level 0. For beginners, I always recommend Overleaf, which is by far the easiest entrypoint—no installation, thousands of templates, cloud storage and compiling, etc. Let an LLM hold your hand through it and you can get far. I know people writing dissertations with Overleaf.

Level 1. For people who would rather work locally, I always recommend TeXstudio, which offers lots of useful menus and toolbars and buttons. In order to work locally – i.e., compile locally – you need to install TeX Live on your local machine. I recommend installing using the curl command, because then, at least on Linux, you get access to tlmgr, the TeX Live Package Manager. Other people get quite far with other editors, like Texmaker, LyX, and others, but I always preferred TeXstudio.

In my own case, I found two reasons not to use Overleaf: I sometimes work without an internet connection, and I need my custom macro files stored in one place. Overleaf requires that you copy your macros into each separate project, and things can get out of hand fast (see the README here). And I found two reasons not to use TeXstudio: I no longer had (much) use for the toolbars (and I wanted better keybindings), and I was tired of keeping track of whether my flash drive was in my laptop or desktop (again, see here). TeXstudio does not provide easy cloud integration, and at the time I was not super proficient at Git.

I use Linux (see here for more on that), so of course most of my problems could have been solved in MacOS or Windows, with iCloud or OneDrive, or else with another Linux-compatible cloud storage service. But the ability to publicly host stuff especially weighs in favor of GitHub, as do version control and collaboration management. Plus, as I am already hosting my personal website on GitHub Pages, it just makes sense to keep everything in one place.

Level 2. For a good while I used VS Code with the LaTeX Workshop extension (plus others) – which works much the same as TeXstudio but without so many toolbars, and with the possibility of more keyboard shortcuts and customizations. VS Code also has an excellent GitHub syncing feature, which makes syncing repositories just a few clicks away, in both directions. Also, when signed in to GitHub in VS Code, all your customizations sync across any machines you’re signed in on. My LaTeX projects (including my homepage!) could live in various private GitHub repositories, and on each of my computers my GitHub repositories could be cloned on my desktop. This way, when I would sit down to work, I would just open VS Code, sync anything that was unsynced, and get to work; and when I was done, I could sync again back to remote. And whenever there was a chance I would have to work without an internet connection, I would just sync my laptop before.

But once again, in my own case, I started to feel VS Code’s limitations. It’s clunky and cluttered, I found myself discovering bugs in my favorite extensions (which I did not have the time or inclination to get involved in fixing), and the GitHub syncing feature is still not as smooth as it should be. Eventually, I just decided to construct GitHub syncing scripts that I could run in the terminal (see here); and by that point, I was actually just getting tired of needing a mouse or trackpad at all.

Level 3. In the Fall of 2025, I ran an experiment to see whether I could move my LaTeX life into either Emacs (with AUCTeX) or Neovim (with VimTeX). This was initially prompted by conversations with Ed Zalta at the 2025 Society for Exact Philosophy Conference, in which I asked him many questions about how he manages the encyclopedia, his own writing, and his homepage so efficiently. His answer: “Emacs.” I experienced profound jealousy, which turned out to be productive: I built a small but serious AUCTeX‑centric Emacs configuration that made it very clear to me how people can treat Emacs as a coherent operating system for thinking on text, rather than just another editor. Also, some people might disagree, but I think Lisp is a beautiful language.

I could not fully commit to Emacs, though, without giving its contemporary competitor an honest try. And as it turned out, Neovim fit better with the rest of my setup. The configuration that stuck is a Neovim‑based LaTeX workflow (described in more detail here) that lives entirely in the terminal, plays nicely with my bash scripts, and lets me treat the editor as one modular piece in a larger Unix pipeline. So at this point I mostly live in Neovim, but I have a lot more sympathy than I used to for the people who never left Emacs, and I still keep my Emacs configuration around as a reminder of how easily things could have gone the other way. I say: “If Emacs were a multi-threaded Haskell interpreter rather than a single-threaded Lisp interpreter, I’d probably be an Emacs guy.”

Level 4. I’m aware of editors like Helix, which, like so much software coming out of the Rust Revolution, do promise big gains along several dimensions. I’ll also mention Typst here, which a student with the most beautiful homework submissions you’ve ever seen recently told me about. But they’re all still too immature to be all that useful for a specialized workflow like my own. If I didn’t have time to fix VS Code extensions, I definitely do not have time to learn Rust. At least Elisp and Lua promise to be robust against the plate tectonics of C and Rust, however the Rust Revolution ends up shaking out.

Level 5. Vi.