Open-source project
SublimeText/LaTeXTools avatar
SublimeText/LaTeXTools

LaTeXTools: the build chain, the completion cache and a version that lags

LaTeX plugin for Sublime Text

2,025 stars379 forksCommon Workflow LanguageNOASSERTION

At a glance

What is it?
LaTeXTools turns Sublime Text into a front end for a real TeX toolchain: `texify` or `latexmk` outside, a parsed log panel and a synced PDF viewer inside. The interesting parts are in the repository root, including a version string that trails the newest tag.
Who is it for?
Adopt LaTeXTools if you want one window to compile LaTeX, read the parsed log and land in Skim, Sumatra PDF, Evince, Okular or Zathura at the right line; no snippet set carries out those three steps. Leave it when you only want command completion, or when you keep your editor and your reader apart on purpose.
Can I use it commercially?
Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
Is it still maintained?
Yes. The repository last received commits 5 days ago.
What is it written in?
Mainly Common Workflow Language, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.

Editorial analysis

The build command picks texify or latexmk by distribution

The Sublime Text build command is the centre of this package. It hands your source to an external compiler, using `texify` on Windows with MiKTeX and `latexmk` on OSX with MacTeX, on Windows with TeXLive, and on Linux with TeXLive. The dispatch follows the TeX distribution rather than the operating system, even though the install notes group the four combinations into pairs with Windows on both sides.

Once the compiler exits, the plugin reads the log file, lists the errors and warnings it finds, and then launches the PDF viewer. Behind that chain sits a single build definition file called `Compile to PDF.sublime-build`. The build command is described as fully customizable rather than fixed, so a project can point it at a different driver without editing Python, and the same settings file carries the viewer choice.

Forward search reaches only the named previewers

Compiling is half the loop and reading the result is the other half. Forward and inverse search are both supported, but the cursor jump is tied to a named set of readers: Sumatra PDF on Windows, Skim on OSX, and Evince on Linux by default, with Okular and Zathura also accepted as viewers. Choose a reader outside that set and position sync, the feature that makes build-and-read feel like one action, is what you give up.

The default reader is chosen per platform rather than through one shared preference, and each integration arrived separately through contributors instead of a common viewer protocol. One contributor added code to find Skim.app in non-standard locations, and another reworked the Evince scripts. Reverse sync has its own override too: one contributor wired `keep_focus` and `forward_sync` into a key binding, which puts those two settings in the binding layer instead of the settings file.

Ref and cite completion run off an analysis pass

The feature list credits analysis and better caching for ref and cite commands, plus an improved fill-all path for large files. Analysis is what feeds the Goto anything facility, where jumping to any section or label in your LaTeX files is the stated goal. What gets filled in spans references, citations, packages, graphics and figures, a wider surface than a plain snippet list covers.

The repository shows those pieces rather than describing them. A `cwl/` directory carries completion data, `vendor/` holds third-party code, and the acknowledgements credit one contributor with the functions that analyze LaTeX documents and the cache, another with the original fill-all command, and two more with multifile support in ref and cite completions. Tests live in `tests/` next to `unittesting.json`, where a Sublime Text package registers its own suite.

%!TEX directives override every configured setting

The bluntest line in the feature list states that `%!TEX directives now override settings in all circumstances`. That word carries weight: it covers the case where a per-file directive and a saved preference disagree, which is the spot where most editor defaults can be pushed around only with caveats.

Two settings files ship in the repository root, `LaTeXTools.sublime-settings` for the common case and `LaTeXTools (Advanced).sublime-settings` for the hand-tuned one, and a `%!TEX` line outranks both. Other overrides travel through the keybinding layer instead. Commands are declared in `Default.sublime-commands` and surfaced through `Main.sublime-menu`, and the contributor who overrode `keep_focus` and `forward_sync` did it from a key binding rather than from a settings file, so a binding can decide where the settings file would have decided.

Package Control, a TeX distribution, then a named viewer

Install through Package Control: open the Command Palette from the Tools menu or from Preferences, run Install Package, and choose LaTeXTools. The hands-on route is to clone the repository or extract its .zip into the Packages directory that Preferences > Browse Packages opens, then restart the editor. That route carries one hard rule, the package directory must be named LaTeXTools, because Sublime Text takes the package name from the directory name.

Neither the TeX system nor the viewer comes with the plugin. Install MacTeX, MiKTeX or TeXLive, and have Skim, Sumatra PDF, Evince, Okular or Zathura ready. To follow the newest feature work instead of the stable channel, add one entry to Preferences > Package Settings > Package Control > Settings - User, at a position where the JSON stays valid:

js
    "install_prereleases": ["LaTeXTools"],

Packages on the same prerelease track go into that same list, comma separated. The first real check is a build on a small document: the build panel should list what the plugin parsed out of the log file, errors and warnings separated, coloured by `LaTeXTools Build Output.sublime-syntax`.

Packaging pins Python 3.8 while the newest tag runs ahead

`pyproject.toml` is where the package declares itself, and the first block sets its name and its Python floor.

toml
[project]
name = "LaTeXTools"
version = "4.5.15"
description = "LaTeX plugin for Sublime Text"
readme = "README.md"
requires-python = ">=3.8"
dependencies = []

The declared version reads 4.5.15 while the newest tag is st4-4.5.16 dated 2026-10-01, and the last push was on 2026-10-03. A working copy on the default branch `master` therefore names itself one build behind the newest cut, so read that version string as the packaging state rather than as the current build.

The second block governs contributors rather than users.

toml
[tool.black]
exclude = '''
/(
  | \.git
  | \.github
  | \.ruff_cache
  | \.venv
  | tests
  | vendor
)/
'''
line-length = 100
target-version = ['py38']

Both formatters run at line-length 100 against a py38 target, and both skip the `tests` and `vendor` trees, so vendored code and the test suite sit outside the formatting contract. The licence field is recorded as Other, a custom licence the hosting service cannot classify, with the terms in the LICENSE file and nothing in the readme summarising them for a user deciding policy fit.

The root carries keymaps for three operating systems

Six platform keybinding files sit in the root: `Default (Linux).sublime-keymap`, `Default (OSX).sublime-keymap` and `Default (Windows).sublime-keymap`, each with a matching `.sublime-mousemap`. A Sublime Text user never opens any of them, and they explain why one machine can offer a binding that another silently lacks.

Editing is configured in the same directory. `BibLaTeX.sublime-syntax` covers LaTeX and BibLaTeX colouring, `LaTeXTools Log.sublime-syntax` colours build output, and three `.tmPreferences` files set comments, log folding and log symbols. Four `Delete Left Right Bracket` macros delete paired brackets the way a text editor should, and `Main.sublime-menu` puts the commands in the menu bar.

Documentation is split across two homes, which is easy to miss when you arrive from a search result. The header sends readers to `sublimetext.github.io`, while the setup steps and the bug guidance send them to `latextools.readthedocs.io`, and a `mkdocs.yml` with a `docs/` directory sits in the repository to serve one of them.

LaTeX-cwl supplies completions, not a build chain

A lighter path sits inside this repository rather than beside it. The `cwl/` directory carries completion data credited in the acknowledgements to LaTeX-cwl support, brought in by the same contributor credited with the original fill-all command. The topic tags list `sublime-snippets` next to `sublime-text-plugin`, so plain snippet files are an accepted way to get typing help in the same editor with no TeX distribution involved at all.

The real difference is ownership of the toolchain. Completion data stops at typing help: it does not compile a document, parse a log file, or move a cursor into a PDF viewer. LaTeXTools takes all three, and with them the obligation to pair a TeX distribution with a viewer it knows how to drive. If you compile elsewhere and only want the editor to stop guessing at command names, the smaller surface fits better, and nothing in this repository obliges you to adopt the build chain.

Editorial conclusion

Adopt LaTeXTools if you want one window to compile LaTeX, read the parsed log and land in Skim, Sumatra PDF, Evince, Okular or Zathura at the right line; no snippet set carries out those three steps. Leave it when you only want command completion, or when you keep your editor and your reader apart on purpose. A manual install still has to name the package directory LaTeXTools. Before upgrading, check why the packaging metadata still reads 4.5.15 beside tag st4-4.5.16, and read the terms file against your own policy first.

Frequently asked questions

What does LaTeXTools need before it can build a document?

A working TeX installation and a PDF viewer, neither of which ships with the plugin. Supported systems are MacTeX, MiKTeX and TeXLive, and supported viewers are Skim, Sumatra PDF, Evince, Okular and Zathura. The plugin itself installs through Package Control.

Does LaTeXTools work on Windows with either MiKTeX or TeX Live?

Yes, through different compilers. The build command uses `texify` with MiKTeX on Windows and `latexmk` with TeX Live on Windows, with OSX/MacTeX, and with Linux/TeXLive, so the distribution you installed decides which program runs.

How do I get the newest LaTeXTools features before everyone else?

Add the entry "install_prereleases": ["LaTeXTools"] to Settings - User under Preferences > Package Settings > Package Control, at a position where the JSON stays valid. Packages you already follow on the same track are added to that same list, comma separated.

Can a single file override the LaTeXTools settings?

Yes. The feature list states that %!TEX directives override settings in all circumstances, so a directive placed in a document wins over what the user settings file has saved.

Where does LaTeXTools keep its build output rules, editor messages and tests?

Build output colouring comes from `LaTeXTools Build Output.sublime-syntax` at the root, update messages come from `messages.json` with its `messages/` directory, and a `tests/` tree pairs with `unittesting.json`.

Does LaTeXTools handle projects made of several tex files?

The feature list states full support for project files and multi-file documents, and two contributors are credited with multifile support in ref and cite completions along with project file support. Fill everything is described as covering references, citations, packages, graphics and figures.

Official sources

  1. Issues
  2. Project website
  3. README
  4. Releases
  5. SublimeText/LaTeXTools on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/sublimetext-latextools.svg)](https://hysenlabs.com/projects/sublimetext-latextools)

Was this useful?