# Obsidian Latex Suite: snippet-driven LaTeX typing inside Obsidian

> Obsidian Latex Suite is a community plugin for Obsidian that expands short triggers into LaTeX math and adds editor behaviour around equations. It is for people who already write math in Obsidian notes and want fewer keystrokes, not for people looking for a full LaTeX document compiler.

**artisticat1/obsidian-latex-suite** — Make typesetting LaTeX as fast as handwriting through snippets, text expansion, and editor enhancements

- Repository: https://github.com/artisticat1/obsidian-latex-suite
- Stars: 2,543 · Forks: 93
- Language: TypeScript
- License: MIT
- Published: 2026-09-28 · Updated: 2026-09-28 · Language: en
- Canonical page: https://hysenlabs.com/projects/artisticat1-obsidian-latex-suite

## The problem: LaTeX math is slow to type, and Obsidian gives you no expansion layer

Writing math in a Markdown note means typing backslashes, braces and command names that are longer than the symbols they produce. \frac{a}{b} is eleven characters for a two-level fraction. \sqrt{x} is eight for a square root. Obsidian renders the result, but the input side is plain text, so every equation costs the same keystrokes it would cost in a raw .tex file, without the benefit of a compiler checking you.

Obsidian Latex Suite targets that gap. It is a plugin for Obsidian, written in TypeScript, that intercepts what you type inside math and replaces short triggers with LaTeX. The README describes the goal directly: making typesetting LaTeX math as fast as handwriting, and credits Gilles Castel's UltiSnips setup as the inspiration. The audience is narrow and specific: people who keep lecture notes, problem sets or research notes in Obsidian and write math continuously rather than occasionally.

If you write one equation a week, the plugin is overhead. If you write equations for an hour at a time, the trigger vocabulary is the difference between typing and transcribing.

## How snippets, auto-fraction and tabout actually work

The core mechanism is a snippet: a trigger string, a replacement string, and options. The README gives this example from the default set:

```typescript
{trigger: "@l", replacement: "\\lambda", options: "mA"}
```

Typing @l produces \lambda. The plugin ships a set of default snippets, described as loosely based on Gilles Castel's, stored in src/default_snippets.js. They are editable and removable, and the README points to a GitHub Discussions thread where users share their own.

The expansions are not limited to one-shot substitutions. The README shows chained triggers where Tab moves the cursor between fields: "par Tab f Tab x Tab" becomes \frac{\partial f}{\partial x}. The same pattern builds an integral: "dint Tab 2pi Tab sin @t Tab @t Tab" becomes \int_{0}^{2\pi} \sin \theta \, d\theta. So the data flow is trigger, expand, place cursor, wait for the next trigger.

Auto-fraction works on a different rule. Typing x/ produces \frac{x}{} with the cursor in the denominator, and (a + b(c + d))/ produces \frac{a + b(c + d)}{}. Tab exits the fraction. Matrix shortcuts are context-sensitive: inside a matrix, array, align or cases environment, Tab inserts &, Enter inserts \\ and starts a new line, and Shift+Enter jumps to the end of the next line, which the README suggests as a way out of the matrix. Tabout handles exits generally: Tab at the end of an equation moves past the $ symbols, inside a \left ... \right pair it jumps past the \right and its delimiter, and otherwise it advances to the next closing bracket among ), ], }, \rangle or \rvert.

Conceal is the one feature that changes rendering rather than input. It hides markup and shows symbols instead: \dot{x}^{2} + \dot{y}^{2} displays as ẋ² + ẏ², and \sqrt{ 1-\beta^{2} } displays as √{ 1-β² }. Moving the cursor over the region reveals the source, and the reveal can be delayed so arrow-key navigation does not flicker. The README states plainly that this must be enabled in the plugin settings.

## Installing the plugin and typing your first equation

The README does not reproduce install steps in the text; the repository carries a manifest.json and version-bump.mts, which is the layout Obsidian community plugins use, and the README's version badge points at that manifest. In practice you install it the way any Obsidian community plugin is installed, from the plugin browser inside Obsidian, then enable it.

Once enabled, the README's own starting point is to type "dm" to enter display math mode, then try the three introductory expansions: "xsr" becomes x^{2}, "x/y" followed by Tab becomes \frac{x}{y}, and "sin @t" becomes \sin \theta. The README says to check the cheatsheet for the list of commonly used default snippets once these feel familiar.

For the building side, the repository is a Node project with an esbuild config and a Lezer grammar that is regenerated on install:

```bash
npm install
npm run dev
npm run build
```

The postinstall script runs the generator:latex step, which invokes lezer-generator on src/parser/mathjax/latex.grammar and writes to src/parser/mathjax/latex-parser. That means a plain npm install already regenerates the parser, so a clone that fails here is a toolchain problem, not a plugin problem. The test script is jiti esbuild.config.mts test followed by vitest --run, so the test suite expects a built artifact before it runs.

The remaining features need no configuration beyond their own toggles: preview inline math shows a popup with the rendered equation when the cursor is inside inline math, and the Command palette gains "Box current equation" and "Select current equation".

## Conceal depends on a font you may not have selected

This is the most concrete failure mode in the README, and it is easy to hit. Conceal replaces LaTeX with Unicode symbols, so the symbols have to exist in the font Obsidian uses for monospace text. The README's note says one of your selected monospace fonts needs to support these symbols, and names JuliaMono as known to work for all of them.

The README gives two fixes. Install the font, or add a webfont declaration to your CSS file and override the monospace variable:

```css
@font-face {
    font-family: JuliaMono;
    src: url(https://github.com/cormullion/juliamono/raw/refs/heads/master/webfonts/JuliaMono-Regular.woff2) format("woff2");
    text-rendering: optimizeLegibility;
}

body {
  --font-monospace-override: JuliaMono;
}
```

If you skip this, conceal does not fail loudly. You get missing-glyph boxes in the middle of your equations, which is worse than reading the LaTeX. The webfont route also pulls a font file from GitHub at render time, which is a dependency on network availability and on that URL continuing to resolve.

The broader limitation is scope. This is an editing plugin for math inside Obsidian notes. It does not compile documents, does not manage a preamble, does not handle bibliographies, and does not produce PDFs. If your workflow ends in a PDF built from a .tex file, this plugin sits at the wrong end of it.

## Compared with plain Obsidian math and with Overleaf

The alternative most people already have is Obsidian's built-in math support with no plugin at all. That gives you the same $ and $$ delimiters and the same renderer, but every command is typed in full. The difference is entirely in the input layer: Latex Suite adds expansion, cursor placement, bracket matching, auto-enlarging \left and \right around \sum, \int or \frac, and the visual snippets that wrap a selection in \underbrace, \overbrace, \cancel, \cancelto or \underset when you type U, O, C, K or B.

The other alternative is a real LaTeX environment, Overleaf being the obvious one. The difference in approach is fundamental. Overleaf compiles a document, so you get error messages, package management and a PDF. Latex Suite never compiles anything; it only makes the text faster to produce inside a note. You cannot get a build log out of it, and it will not tell you that a command is misspelled. If correctness checking is what you want, this is not the tool. If speed of entry is what you want, a compiler does not help you.

A fair summary of the trade: Latex Suite optimises the typing, and everything downstream of typing is unchanged.

## Maintenance, licence and what an upgrade costs you

The repository is not archived, and the last push was on 2026-09-27. Recent releases are 1.13.1 on 2026-09-09, 1.13.2 on 2026-09-26 and 1.13.3 on 2026-09-27, so the release cadence around that date is close together rather than spread out.

The licence is MIT, declared in package.json and present as LICENSE.md at the repository root. MIT is permissive: you can reuse and modify the code, subject to the licence text itself. That is a statement about the licence file, not legal advice about your situation.

The real upgrade cost is not the plugin, it is your snippet set. If you write your own snippets, they live in your vault configuration, and the default set can change between versions. The README treats the defaults as a starting point to be modified and removed, so an upgrade that touches src/default_snippets.js can collide with a trigger you have already claimed. Keep your custom snippets distinguishable from the shipped ones, and read the default file after a version bump rather than assuming the triggers you learned are still the ones in effect.

## Conclusion

Adopt Obsidian Latex Suite if you type a lot of inline and display math in Obsidian and are willing to learn a trigger vocabulary, since the default snippets and the community snippet thread are where most of the speed comes from. Skip it if you need a full LaTeX toolchain with a document preamble, bibliography handling and PDF output, because this plugin only edits math inside notes. Before installing, check that one of your selected Obsidian monospace fonts covers the conceal symbols (JuliaMono is the font the README names), and read the default snippet file so you know which triggers you are about to inherit.

## FAQ

### How do I use Obsidian Latex Suite?

Enable the plugin, then type "dm" to enter display math mode and try the README's starter expansions: "xsr" becomes x^{2}, "x/y" followed by Tab becomes \frac{x}{y}, and "sin @t" becomes \sin \theta. The README then points you at the cheatsheet and the default snippets file for the rest of the trigger vocabulary.

### Is Obsidian a LaTeX editor?

No. Obsidian renders LaTeX math inside Markdown notes, and Obsidian Latex Suite adds snippet expansion and editor behaviour on top of that input. The plugin does not compile documents or produce PDFs.

### Can I use Overleaf in Obsidian?

The repository does not describe any Overleaf integration. Obsidian Latex Suite is an editing plugin for math inside Obsidian notes, and the README does not mention compiling or syncing to an external LaTeX service.

### Why would someone use LaTeX?

The README does not discuss why people use LaTeX in general. It describes Obsidian Latex Suite as a way to make typesetting LaTeX math as fast as handwriting through snippets, text expansion and editor enhancements.

### What is LaTeX and why is it used?

The README does not define LaTeX. It treats LaTeX as the math markup you type inside Obsidian notes, and the plugin's purpose is to expand short triggers such as "@l" into commands such as \lambda rather than to explain the language.

## Sources

- [artisticat1/obsidian-latex-suite on GitHub](https://github.com/artisticat1/obsidian-latex-suite)
- [Issues](https://github.com/artisticat1/obsidian-latex-suite/issues)
- [License: MIT](https://github.com/artisticat1/obsidian-latex-suite/blob/main/LICENSE)
- [README](https://github.com/artisticat1/obsidian-latex-suite/blob/main/README.md)
- [Releases](https://github.com/artisticat1/obsidian-latex-suite/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/artisticat1-obsidian-latex-suite
