To follow this section you will need Tectonic and GNU Emacs installed on your system. Additionally, you will require the AucTeX emacs package to be installed before following along.
Note: This section makes use of the V2 tectonic CLI, invoked using the
tectonic -Xflag or
All the code displayed in this section should go into your
init.el file (or
equivalent, such as
config.el if you are using
First, load the AucTeX package.
You will need to set the default TeX engine AucTeX uses to figure out the build
commands to use Tectonic instead of traditional TeX distributions. Therefore we
have to modify the
- The first element of the list is the symbol that AucTeX recognizes.
- The second element is a string with the name of the TeX distribution.
- The third element is the shell command for compiling plain TeX documents.
- The fourth element is the shell command for compiling LaTeX documents. Here we
are assuming the user is using a Tectonic project (generated using
tectonic -X new <proj-name>).
- The last element is the shell command for compiling ConTeXt documents, left unconfigured for now.
(setq TeX-engine-alist '((default "Tectonic" "tectonic -X compile -f plain %T" "tectonic -X watch" nil)))
Next, modify the
LaTeX-command-style so that AucTex doesn’t add extra options
to it that Tectonic does not recognize. We simply set it to the
TeX-expand-list-builtin), removing any other extra options.
(setq LaTeX-command-style '(("" "%(latex)")))
We need to set the
TeX-check-TeX variable to
nil since AucTeX will try to
find a traditional distribution like
TeXLive or others, and will fail since
Tectonic doesn’t meet its criteria.
Additionally, we should also set
t, so that
running Tectonic in watch mode doesn’t hang up Emacs.
We’ll also just ensure that the
TeX-engine is set to
(setq TeX-process-asynchronous t TeX-check-TeX nil TeX-engine 'default)
Finally, modify the
TeX-command-list to use the appropriate commands and not
pass in extra metadata and options to Tectonic that cause it to error out. This
needs to be done in place.
(let ((tex-list (assoc "TeX" TeX-command-list)) (latex-list (assoc "LaTeX" TeX-command-list))) (setf (cadr tex-list) "%(tex)" (cadr latex-list) "%l"))
And that is all! You should now be able to
- Compile plain TeX files.
- Build Tectonic LaTeX projects in watch mode.
To do this, you can simply invoke
M-x TeX-command-master and select the
Other option, passing in the compile command
tectonic -X compile -f latex <name of file>.
Caution: Compiling a document with multiple LaTeX files in this manner isn’t extensively tested, as using a Tectonic project is the better way in that case. Any bug reports are welcome.
AucTeX expects the output PDF after compiling to be in the same directory as the input file. So it will error out when that is not the case, since Tectonic places the output in a build directory.
This behavior can be controlled by using the
TeX-output-dir variable on a per
This configuration assumes you are using
project.el, although porting this
projectile.el should be trivial.
(add-hook 'after-change-major-mode-hook (lambda () (when-let ((project (project-current)) (proot (project-root project))) (when (file-exists-p (expand-file-name "Tectonic.toml" proot)) (setq-local TeX-output-dir (expand-file-name "build/index" proot))))))
We are basically looking for
Tectonic.toml file in the project root, and if it
exists, setting the
TeX-output-dir to the appropriate path to the build
directory. You may replace the
"build/index" path with wherever your PDF file
is placed after it is generated by Tectonic.