Table of Contents

LaTeX layer

Table of ContentsClose


1. Description

This layer adds support for LaTeX files with AucTeX.

1.1. Features:

  • Auto-build with auctex-latexmk
  • Syntax highlighting
  • Auto-completion
  • Tags navigation on % with evil-matchit
  • Labels, references, citations and index entries management with RefTeX
  • LaTeX-specific text objects and much more with evil-tex

2. BibTeX

For more extensive support of BibTeX files than RefTeX provides, have a look at the BibTeX layer.

3. Install

To use this configuration layer, add it to your ~/.spacemacs. You will need to add latex to the existing dotspacemacs-configuration-layers list in this file.

4. Configuration

Most layer configurations can be done by setting layer variables in your dotfile. Some however require adding lines to your user-config. If the pdf layer is used, then the layer automatically configures pdf-tools as the 'output-pdf' viewer, see 4.3.

4.1. Variables

A number of configuration variables have been exposed via the layer config.el. Sensible defaults have been provided, however they may all be overridden in your .spacemacs.

Variable Name Default Description
latex-backend nil Use LSP backend, unless it's `company-auctex` or LSP layer isn't enabled
latex-build-command 'latexmk if it's found Default command to use with SPC m b
latex-build-engine 'xetex if it's found and chinese / japanese layer is enabled Default TeX engine to use with SPC m b
latex-enable-auto-fill t When non-nil, enable auto-fill-mode
latex-enable-folding nil When non-nil, enable TeX-fold-mode
latex-enable-magic nil When non-nil, enable magic symbols
latex-nofill-env See details below A list of LaTeX environment name where auto-fill-mode is disabled
latex-refresh-preview nil When non-nil, enable refresh preview buffer when file changes
latex-view-with-pdf-tools t if pdf layer is installed, else nil When non-nil, use pdf-tools for viewing output pdf files
latex-view-pdf-in-split-window nil setting is neglected if latex-view-with-pdf-tools is nil When non-nil, open pdf-tools in split window (when using TeX-view command)

4.2. Choosing a backend

This layer provides two alternative backends to choose from.

4.2.1. LSP

This is the default backend if LSP layer is enabled. It provides proper IDE support and is recommended over company-auctex.

Currently, the LaTeX LSP backend depends on TexLab. You may built the newest version from source by first installing Rust and then running

cargo install --git

Alternatively, you can install it in your package manager, or get the pre-compiled binaries. You also need to enable LSP layer in your ~/.spacemacs.

To explicitly choose LSP backend for LaTeX layer, add the following:

(setq-default dotspacemacs-configuration-layers
              '((latex :variables latex-backend 'lsp)))

When LSP is chosen as the backend, auto-completions are provided by LSP. If you are not happy with the suggestions for completing citation keys and reference labels (in \cite{...}, \ref{...}, and related macros), you can press C-b in the auto-completion dropdown (see the auto-completion layer) to switch to suggestions provided by RefTeX.

4.2.2. Company-auctex

This would be the backend if LSP layer is not enabled, and latex-backend is not set.

This mode only provides very limited IDE capabilities and only recommended best for infrequent LaTeX editing needs.

To explicitly choose company-auctex as the backend, set the following in your ~/.spacemacs:

(setq-default dotspacemacs-configuration-layers
              '((latex :variables latex-backend 'company-auctex)))

When company-auctex is chosen as the backend, it uses company-math for the completion of math symbols. company-math displays a unicode representation of symbols proposed for completion. It is supposed to have a better coverage of latex symbols than the default counter-part in company-auctex. If you prefer to use company-auctex for math symbols completion set the following in your ~/.spacemacs:

(setq-default dotspacemacs-configuration-layers
              '((latex :packages (not company-math))))

4.3. PDF viewer

If the pdf layer is used, then the layer automatically configures pdf-tools as the 'output-pdf' viewer, see 4.3. To additionally make pdf-tools open in a split window, set the layer variable latex-view-pdf-in-split-window to t.

If, despite using the pdf layer, you prefer to use another pdf viewer to preview the output pdf's, set the layer variable latex-view-with-pdf-tools to nil.

4.4. Previewing

LaTex layer support full-document previews and inline preview (via SPC m p).

To update the preview buffer whenever the compiled PDF file changes, set latex-refresh-preview to t in your ~/.spacemacs:

(setq-default dotspacemacs-configuration-layers
              '((latex :variables latex-refresh-preview t)))

TexLab also supports more sophisticated previewing setup, which is documented here.

4.5. Build command

A build command can be specified via the layer variable latex-build-command. This variable can be set to any of the entities in TeX-command-list, including any custom entries you may have added there.

If latexmk is found on your system PATH, LatexMk will be chosen as your latex-build-command, unless if it's not set.

To use the regular AucTeX command, set latex-build-command to LaTeX as shown below.

(setq-default dotspacemacs-configuration-layers
              '((latex :variables latex-build-command "LaTeX")))

4.6. TeX Engine

auctex and auctex-latexmk have default rules to determine build command and build options according to the buffer-local variable TeX-engine.

It should be one of the symbol defined in TeX-engine-alist. The default valid symbols are:

  • default
  • luatex
  • omega
  • xetex

An appropriate TeX-engine is required for high-quality typesetting in certain languages. For convenience, xetex is chosen when it's found on PATH and when either chinese or japanese layer is enabled.

You can choose the engine on a per file basis, by setting file-local variable. For example, you can append these code to the end of a .tex file:

%%% Local Variables:
%%% TeX-engine: xetex
%%% End:

Should you use AUCTeX's keystroke C-c C-c for compilation instead of Spacemacs' SPC m b, the minibuffer will still show LaTeX as compilation command, however xetex will be used on the background and no specific Xe(La)TeX command is needed. Likewise for the other engines.

If you predominantly work with one specific engine, you can set it as a layer variable.

(setq-default dotspacemacs-configuration-layers
              '((latex :variables latex-build-engine 'xetex)))

More information on TeX engine and languages support can be found in auctex manual page.

4.7. Auto-fill

To disable auto-fill (which is on by default) set the variable latex-enable-auto-fill to nil.

(setq-default dotspacemacs-configuration-layers
              '((latex :variables latex-enable-auto-fill nil)))

The variable latex-nofill-env provides the list of environment names where auto-fill-mode will be inhibited. By default it includes:

  • "equation"
  • "equation*"
  • "align"
  • "align*"
  • "tabular"
  • "tabular*"
  • "tabu"
  • "tabu*"
  • "tikzpicture"

4.8. Folding

Enable folding of text by setting latex-enable-folding to t. Default value is nil.

(setq-default dotspacemacs-configuration-layers
              '((latex :variables latex-enable-folding t)))

4.9. Magic latex buffer

To enable "magic" symbols in latex buffers, set the variable latex-enable-magic to t.

(setq-default dotspacemacs-configuration-layers
              '((latex :variables latex-enable-magic t)))

The precise effect of this feature can be modified by adjusting the following variables:

  • magic-latex-enable-block-highlight: show font properties like \large (default t).
  • magic-latex-enable-block-align: reflect block alignment such as \center (default nil).
  • magic-latex-enable-pretty-symbols: substitute symbols in place of code, e.g. greek letters (default t).
  • magic-latex-enable-suscript: show subscripts and superscripts (default t).
  • magic-latex-enable-inline-image: show images inline (default nil).

By default, the underlying latex code is echoed in the echo area.

5. Key bindings

Key binding Description
SPC m - recenter output buffer
SPC m , TeX command on master file
SPC m . mark LaTeX environment
SPC m * mark LaTeX section
SPC m % comment or uncomment a paragraph
SPC m ; comment or uncomment a region
SPC m a or with LSP SPC m a u run all commands (compile and open viewer)
SPC m b or with LSP SPC m c build the document (compile)
SPC m c or with LSP SPC m i c close LaTeX environment
SPC m i c or with LSP SPC m i C insert cite key
SPC m e or with LSP SPC m i e insert LaTeX environment
SPC m i i insert \item
SPC m k kill TeX job
SPC m l recenter output buffer
SPC m m insert LaTeX macro
SPC m n goto next error
SPC m N goto previous error
SPC m s insert LaTeX section
SPC m v view output
SPC m h d TeX documentation, can be very slow
SPC m f e fill LaTeX environment
SPC m f p fill LaTeX paragraph
SPC m f r fill LaTeX region
SPC m f s fill LaTeX section
SPC m p r preview region
SPC m p R clear previews in region
SPC m p b preview buffer
SPC m p B clear previews in buffer
SPC m p d preview document
SPC m p D clear previews in document
SPC m p e preview environment
SPC m p s preview section
SPC m p S clear previews in section
SPC m p p preview at point
SPC m p P clear preview at point
SPC m p f cache preamble for preview
SPC m p c clear previews
SPC m v view
SPC m x b make font bold
SPC m x B make font medium weight
SPC m x c make font monospaced (for code)
SPC m x e make font emphasised
SPC m x i make font italic
SPC m x o make font oblique
SPC m x r remove font properties
SPC m x f a use calligraphic font
SPC m x f c use small-caps font
SPC m x f f use sans serif font
SPC m x f n use normal font
SPC m x f r use serif font
SPC m x f u use upright font

5.1. Folding

Available only when latex-enable-folding is non nil.

Key binding Description
SPC m z = fold TeX math
SPC m z b fold TeX buffer
SPC m z B clear TeX folds in buffer
SPC m z e fold TeX environment
SPC m z p fold TeX paragraph
SPC m z P clear TeX folds in paragraph
SPC m z m fold TeX macro at point
SPC m z I clear TeX fold at point
SPC m z r fold TeX region
SPC m z R clear TeX folds in region
SPC m z z fold TeX dwim

5.2. RefTeX

Key binding Description
SPC m r c or with LSP SPC m R c reftex-citation
SPC m r g or with LSP SPC m R g reftex-grep-document
SPC m r i or with LSP SPC m R i reftex-index-selection-or-word
SPC m r I or with LSP SPC m R I reftex-display-index
SPC m r TAB or with LSP SPC m R TAB reftex-index
SPC m r l or with LSP SPC m R l reftex-label
SPC m r p or with LSP SPC m R p reftex-index-phrase-selection-or-word
SPC m r P or with LSP SPC m R P reftex-index-visit-phrases-buffer
SPC m r r or with LSP SPC m R r reftex-reference
SPC m r s or with LSP SPC m R s reftex-search-document
SPC m r t or with LSP SPC m R t reftex-toc
SPC m r T or with LSP SPC m R T reftex-toc-recenter
SPC m r v or with LSP SPC m R v reftex-view-crossref

5.3. evil-tex

See the evil-tex documentation for more comprehensive explanation of text objects it provides and its other features, including its integration with evil-surround.

Key binding Description
]] / [[ jump between section headings
M-n Move between braces, similar to TAB in cd-latex
SPC m q Prefix for evil-tex toggle commands

In order to preserve both the precious t mark and the indispensable ts motion, the evil-tex "magnificent toggles" are bound under SPC m q rather than mt or ts. This binding can be remembered with mnemonic "quite magnificent toggle".

Author: root

Created: 2024-06-14 Fri 18:51