Sublime Text (LaTeXTools)

Sublime Text is the one editor in this section you are expected to pay for, and the one that knows nothing about LaTeX beyond a syntax definition until you install something. There has never been a free edition, only an evaluation with no enforced time limit — and a personal licence still costs 99 dollars in a market whose obvious competitor is free. The package that turns the editor into a LaTeX environment is LaTeXTools. This page covers what LaTeXTools adds, why Ctrl+B ends up running latexmk underneath, the \ref and \cite quick panel that is the package’s best feature, the .latexmkrc route for upLaTeX, and — because this is the question readers actually face — what choosing Sublime Text means today.

Who wrote LaTeXTools, and who maintains it now

To the suspicion that LaTeXTools might be dead, the answer is a clear no. The repository was created in March 2011; the README credits Ian Bacher, Marciano Siniscalchi and Richard Stein as its creators and names DeathAxe as the current maintainer. The stable release 4.5.14 came out on 30 July 2026, and there is no deprecation notice and no call for maintainers anywhere in it. One thing worth noticing is where it lives. It sits in a GitHub organization called SublimeText, but that is a community organization and not Sublime HQ, as its own description says — a collection of packages maintained by the community. The editor and the package belong to different people entirely.

Installation goes through Package Control. Package Control is not bundled code but a bootstrap installer, and the menu item and command-palette entry that fetch it have been in Sublime Text since build 3124 of Sublime Text 3, in September 2016. Open the Command Palette (Ctrl+Shift+P on Windows and Linux, Cmd+Shift+P on macOS), run Install Package Control, then run Package Control: Install Package and choose LaTeXTools. No restart is needed: open a .tex file, the syntax switches to LaTeX, and the features come alive.

Two things to do straight afterwards. The first is to prepare a settings file: Preferences → Package Settings → LaTeXTools → Settings – User creates an editable LaTeXTools.sublime-settings in your User directory. Never edit the default file inside the plugin folder — it is overwritten on every upgrade. The second is to check the setup: running LaTeXTools: Check system from the Command Palette lists whether the TeX commands, the PDF viewer and the subl executable are visible to LaTeXTools. That command has no key binding and can only be reached from the palette. It is the first thing to run when something does not work.

What Ctrl+B really runs: the traditional builder and latexmk

Builds run on Sublime Text’s own key, Ctrl+B (Cmd+B on macOS). LaTeXTools does not add a key of its own; it replaces the build system itself. The default builder is traditional, and a single build saves the current file, invokes the TeX build command, parses the log and lists errors, warnings and — if you enable them — bad boxes in a panel at the bottom, then opens the PDF viewer and forward-searches to your cursor. Click an error in the panel to jump to that line, and press Shift+Escape to bring the panel back after closing it.

The key fact is that the traditional builder is latexmk underneath. It calls latexmk on TeX Live and MacTeX, and texify on MiKTeX. Its default command line reads like this: -cd changes into the source’s directory before processing, -f keeps going as far as it can after an error, -interaction=nonstopmode avoids interactive stops, and -synctex=1 emits the synchronization data the forward and inverse search below need. %E is a placeholder that expands to -pdf (pdfLaTeX), -lualatex or -xelatex according to the engine you pick. Choosing an engine, in other words, is nothing but changing what %E expands to.

terminal
latexmk -cd -f -%E -interaction=nonstopmode -synctex=1

One warning follows from this, because it bites the people who install the smallest thing that could work. LaTeXTools depends on latexmk, and latexmk is not always there. BasicTeX on macOS leaves it out, so run sudo tlmgr install latexmk, add it through the TeX Live Utility, or point builder at one that does not need it. Ubuntu is the same: apt-get install texlive does not bring it, so apt-get install latexmk as well. On MiKTeX the builder calls texify instead, and texify supports none of the output_directory, aux_directory and jobname settings; if you need those, move to the basic builder, which does support them but not makeindex. builder_settings also takes an env key, a dictionary of environment variables set only for the build.

The easiest way to choose an engine is a magic comment at the top of the file. Put this on the first line of your .tex and the matching engine is used; without it the default is pdfLaTeX. In a multi-file project the line goes in the root (master) file. For TeXShop compatibility, TS-program means the same thing. Only three values are accepted: pdflatex, lualatex and xelatex. The family has more members: %!TEX options = ... passes extra options to the engine (--shell-escape, say), %!TEX root = <master> names the root file, and %!TEX output_directory and %!TEX jobname decide where the generated files go and what they are called. The order of precedence is worth remembering — a directive outranks your settings file, and a build variant chosen with Ctrl+Shift+B outranks the directive. That is why an engine sometimes refuses to change while a variant is selected.

latex
%!TEX program = lualatex
%!TEX root = main.tex
%!TEX options = --shell-escape

The other essential is texpath — the PATH used to find the TeX commands when launching latexmk and friends. On macOS in particular, a Sublime Text started from the GUI has a different PATH from your shell, so a wrong value fails with “command not found”. The rule is that texpath must include $PATH: your own paths first, then $PATH. A typical macOS value is "/Library/TeX/texbin:$PATH"; on Windows it looks like "C:\\texlive\\2026\\bin\\windows;$PATH", adjusted to your installation. On Windows, also set distro to "texlive" or "miktex" to match. To change builders, set builder to basic (a minimal builder running the engine plus bibtex or biber) or script (an advanced one where you write your own command sequence in script_commands).

terminal
{
  // LaTeXTools.sublime-settings (User)
  "texpath": "/Library/TeX/texbin:$PATH",
  "builder": "traditional",
  "builder_settings": {
    "program": "lualatex",
    "options": ["--shell-escape"]
  }
}

The quick panel that appears the moment you type \ref{ or \cite{

This is the part of LaTeXTools that feels best. The instant you finish typing \ref{ or \cite{, a quick panel — Sublime Text’s own filtering list — drops down at the top of the screen. For \ref{ it holds every \label in the document; for \cite{, every entry in the bibliographies you reference through \bibliography{} or biblatex’s \addbibresource{}. Type a few characters to fuzzy-filter, choose, press Enter, and the whole command is inserted, as in \ref{my-label}. Type a comma just before the closing brace, as in \cite{paper1,, and you pick the second and later keys of a multiple citation the same way.

Two pitfalls. First, LaTeXTools gathers its candidates from the saved file, so if a label or key you have just added does not appear, save first. Second, only external .bib files are supported; \bibitems written inline in the document are not picked up. If the automatic panel feels intrusive it can be turned off in the settings, and to summon it by hand you press Ctrl+l, x (Cmd+l, x on macOS) or Ctrl+l, Ctrl+f right after \ref{ and the like. The reference and citation commands of cleveref, fancyref, varioref, natbib and biblatex are recognised too.

Two more families of completion. Command completion ships the TeXStudio-derived completion word lists (CWL) and shows candidates the moment you start a command with \: type \te and \textit and its relatives appear. Its behaviour is governed by the command_completion setting — prefixed (the default; only when the word starts with \), always, or never. Candidates for the packages your document loads are added automatically by cwl_autoload, which is on by default, and enabling env_auto_trigger completes environment names after \begin{ and \end{ as well. The other family is the Fill Helper: type \usepackage{, \include{, \input{ or \includegraphics{ and it offers the packages you have installed or the files in the current directory, filtered to images for \includegraphics. To call it by hand, Ctrl+l, Ctrl+f. The only preparation needed is for package completion: run LaTeXTools: Build cache for LaTeX packages from the Command Palette once.

upLaTeX and dvipdfmx: put the route in .latexmkrc

This is where Japanese documents trip people up. %!TEX program accepts only pdflatex, lualatex and xelatex, so you cannot name uplatex or platex directly. Typesetting Japanese with LuaLaTeX is easy: write %!TEX program = lualatex and use a class from the luatexja / ltjsclasses family. The awkward case is upLaTeX + dvipdfmx, the route that builds a DVI and then converts it to PDF.

The clean solution is to let .latexmkrc choose the engine. Since the traditional builder is latexmk underneath, dropping a .latexmkrc into the project directory (or your home directory) switches the toolchain to the Japanese route with almost no change to LaTeXTools’ own settings. The key points: assign uplatex to $latex and dvipdfmx to $dvipdf, then set $pdf_mode = 3 to select the “build a DVI, then convert with dvipdfmx” path. Passing -synctex=1 to $latex as well carries the synchronization data through to the PDF even by way of a DVI, so the search below works. On the LaTeXTools side it is safest not to write a %!TEX program line at all — writing one selects the pdfLaTeX %E.

latexmkrc
$latex = 'uplatex -synctex=1 -interaction=nonstopmode -file-line-error %O %S';
$bibtex = 'upbibtex %O %B';
$biber = 'biber --bblencoding=utf8 -u -U --output_safechars %O %S';
$makeindex = 'upmendex %O -o %D %S';
$dvipdf = 'dvipdfmx %O -o %D %S';
$pdf_mode = 3;
$max_repeat = 5;

If you want to be more explicit, the command key in builder_settings lets you name latexmk directly. Writing "command": "latexmk" — keeping the options in .latexmkrc — guarantees that the Japanese-configured latexmk is what runs. Customizing command does disable engine auto-selection through %!TEX program, but in a setup that pins the route in .latexmkrc, as Japanese workflows do, there is nothing to lose. latexmk configuration itself belongs to the automated-builds page.

Forward search is Ctrl+l, j; inverse search lives in the viewer

LaTeXTools’ default build command already contains -synctex=1, so an ordinary Ctrl+B writes out the synchronization data (.synctex.gz) for you. After that it is one keystroke: while editing a .tex, Ctrl+l, j (Cmd+l, j on macOS) shows the PDF page matching your cursor. A forward search also runs automatically right after a build, so Ctrl+B alone opens the right spot. To merely open the PDF without syncing, use Ctrl+l, v. Note that Ctrl+l is normally Sublime Text’s “expand selection to line”, but in a .tex file with LaTeXTools active it becomes the prefix for the package’s commands. How SyncTeX itself works is covered on its own page.

Inverse search (PDF → source) works by having the viewer call back into Sublime Text, so the configuration lives on the viewer’s side. The default viewer is fixed per platform and can be changed with the viewer setting: SumatraPDF on Windows, Skim on macOS, Evince on Linux (XReader on Linux Mint), with Okular and Zathura also selectable on Linux. Sioyek works on all three platforms, and every viewer named so far supports both forward and inverse search. The exception to watch for is macOS’s Preview.app, which supports neither. The click gesture differs too: Cmd+Shift+click in Skim, a double-click in SumatraPDF, Ctrl+left-click in Evince and Zathura, Shift+left-click in Okular.

viewer valueOSNotes
skimmacOSThe macOS default, and effectively the only macOS viewer with both forward and inverse search
previewmacOSJust opens Preview.app. Neither forward nor inverse search works
sumatraWindowsThe Windows default. Avoid Adobe’s PDF viewer, which locks the open PDF and breaks the build
evinceLinuxThe Linux default. Your system Python needs the dbus bindings
okularLinuxFor inverse search, register subl "%f:%l" under Settings → Configure Okular → Editor
zathuraLinuxWorks with almost no configuration; wmctrl or xdotool makes focus handling reliable
xreaderLinuxThe default on Linux Mint; treated much like Evince
sioyekLinux / macOS / WindowsA viewer aimed at technical books and papers; available on all three platforms
commandLinux / macOS / WindowsThe escape hatch for any other viewer: write view_command and forward_sync_command yourself

With Skim on macOS you only have to pick the “Sublime Text” preset in the Sync tab of its preferences. On older builds without that preset, choose Custom, set Command to the absolute path of subl (/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl) and Arguments to "%file":%line. With SumatraPDF on Windows the inverse-search settings field appears only when you open a PDF that has synchronization data, so build once with Ctrl+B, open that PDF in Sumatra, then register the command line below under Settings → Options. When it misbehaves, check in this order: whether the build ran with -synctex=1, whether the viewer’s preset or command is right, and — through LaTeXTools: Check system — whether sublime_executable, the location of subl, is visible.

terminal
"C:\\Program Files\\Sublime Text\\sublime_text.exe" "%f:%l"

Is Sublime Text still worth buying for LaTeX?

Start by getting the shape of the licence right. In Sublime HQ’s own words, Sublime Text may be downloaded and evaluated free of charge, but a licence must be purchased for continued use, and there is currently no enforced time limit on the evaluation. The licence is per user: according to the EULA it is valid on every supported operating system, and it may be used on several computers as long as the licence holder is the primary user. A personal licence is a once-off purchase that comes with three years of updates; receiving updates beyond those three years requires an upgrade. Business licences take a different shape — an annual per-seat subscription, starting at 65 dollars per seat per year for the first ten seats and tiering downward as the seat count grows. (As of August 2026 a personal licence is 99 dollars.)

With that settled, two numbers deserve an honest look. The first is the pace of development. The stable channel has not moved since build 4200 on 21 May 2025 — over a year as of August 2026. (Dev builds have reached 4207, but those are for licence holders only.) The second is where users are. In Stack Overflow’s 2025 developer survey, 75.9% of respondents named Visual Studio Code as an integrated development environment they use, against 10.5% for Sublime Text — roughly a sevenfold gap.

The decision still comes out clean. If you already own Sublime Text and its speed is part of why you work the way you do, LaTeXTools is a finished, maintained package — the build, the completion, the reference panels: everything you need is there. If, on the other hand, you are choosing an editor for LaTeX alone today, the extensions and the written-up answers are on the VS Code side. Seen from the manuscript, either way your .tex, .bib and .latexmkrc are identical, and the cost of switching is a couple of configuration files. Which lands on the real point: pinning the build to the project matters far more than which editor you pick.

The first pass: four things to check

  • The first command to run: LaTeXTools: Check system from the Command Palette, to confirm that the TeX commands, the PDF viewer and the subl executable are all visible.
  • The Japanese fork: for LuaLaTeX, %!TEX program = lualatex. For upLaTeX, write no %!TEX program at all and leave the route to .latexmkrc.
  • When it fails: if Ctrl+B reports a missing command, inspect texpath. If references do not update, save and rebuild. If PDF-to-source does nothing, check the viewer’s inverse-search setting.
  • When to make it a project: once figures or chapter files multiply, pin the master with a Sublime project or %!TEX root so that Ctrl+B from any tab produces the same PDF.