doomemacs/modules/lang/latex/config.el

142 lines
4.9 KiB
EmacsLisp
Raw Normal View History

;;; lang/latex/config.el -*- lexical-binding: t; -*-
2016-05-08 18:27:28 -04:00
(defvar +latex-indent-level-item-continuation 4
"Custom indentation level for items in enumeration-type environments")
2016-05-08 18:27:28 -04:00
2018-07-30 02:38:42 +02:00
(defvar +latex-bibtex-file nil
2018-07-18 13:38:02 +02:00
"File AUCTeX (specifically RefTeX) uses to search for citations.")
(defvar +latex-enable-unicode-math nil
"If non-nil, use `company-math-symbols-unicode' backend in LaTeX-mode,
enabling unicode symbols in math regions. This requires the unicode-math latex
package to be installed.")
(defconst +latex-viewers `(skim zathura okular pdf-tools)
"A list of enabled latex viewers to use, in this order. If they don't exist,
they will be ignored. Recognized viewers are skim, zathura, okular and
pdf-tools.
If no viewers are found, `latex-preview-pane' is used.")
;;
(defvar +latex--company-backends nil)
2018-07-18 13:38:02 +02:00
;;
;; Packages
2018-07-18 13:38:02 +02:00
(def-package! tex
:mode ("\\.tex\\'" . TeX-latex-mode)
:config
(setq TeX-parse-self t ;; parse on load
TeX-auto-save t ;; parse on save
;; use hidden dirs for auctex files
TeX-auto-local ".auctex-auto"
TeX-style-local ".auctex-style"
TeX-source-correlate-mode t
TeX-source-correlate-method 'synctex
2018-07-18 13:38:02 +02:00
;; don't start the emacs server when correlating sources
TeX-source-correlate-start-server nil
;; automatically insert braces after sub/superscript in math mode
TeX-electric-sub-and-superscript t)
2018-07-30 02:38:42 +02:00
;; fontify common latex commands
(load! "+fontification")
;; select viewer
(load! "+viewers")
2018-07-18 13:38:02 +02:00
;; prompt for master
(setq-default TeX-master nil)
2018-07-18 13:38:02 +02:00
;; set-up chktex
2018-07-18 14:03:31 +02:00
(setcar (cdr (assoc "Check" TeX-command-list)) "chktex -v6 -H %s")
2018-07-18 14:04:23 +02:00
;; tell emacs how to parse tex files
2018-07-30 02:38:42 +02:00
(setq-hook! 'TeX-mode-hook ispell-parser 'tex)
;; Enable word wrapping
(add-hook 'TeX-mode-hook #'visual-line-mode)
;; Fold TeX macros
(add-hook 'TeX-mode-hook #'TeX-fold-mode)
2018-07-18 13:38:02 +02:00
;; display output of latex commands in popup
(set-popup-rule! " output\\*$" :size 15)
2018-07-18 13:38:02 +02:00
;; Do not prompt for Master files, this allows auto-insert to add templates to
;; .tex files
2018-07-30 02:38:42 +02:00
(add-hook! 'TeX-mode-hook
;; Necessary because it is added as an anonymous, byte-compiled function
(remove-hook 'find-file-hook
(cl-find-if #'byte-code-function-p find-file-hook)
'local))
2018-07-18 13:38:02 +02:00
;; Enable rainbow mode after applying styles to the buffer
2018-07-18 15:31:35 +02:00
(add-hook 'TeX-update-style-hook #'rainbow-delimiters-mode)
2018-07-18 13:38:02 +02:00
(when (featurep! :feature spellcheck)
(add-hook 'TeX-mode-hook #'flyspell-mode :append))
;; All these excess pairs dramatically slow down typing in latex buffers, so
;; we remove them. Let snippets do their job.
(after! smartparens-latex
(let ((modes '(tex-mode plain-tex-mode latex-mode LaTeX-mode)))
(dolist (open '("\\left(" "\\left[" "\\left\\{" "\\left|"
"\\bigl(" "\\biggl(" "\\Bigl(" "\\Biggl(" "\\bigl["
"\\biggl[" "\\Bigl[" "\\Biggl[" "\\bigl\\{" "\\biggl\\{"
"\\Bigl\\{" "\\Biggl\\{"
"\\lfloor" "\\lceil" "\\langle"
"\\lVert" "\\lvert" "`"))
(sp-local-pair modes open nil :actions nil))
(sp-local-pair modes "``" nil :unless '(:add sp-in-math-p)))))
2018-07-18 13:38:02 +02:00
2018-07-18 15:31:35 +02:00
(after! latex
(setq LaTeX-section-hook ; Add the toc entry to the sectioning hooks.
'(LaTeX-section-heading
LaTeX-section-title
LaTeX-section-toc
LaTeX-section-section
LaTeX-section-label)
LaTeX-fill-break-at-separators nil
2018-07-18 13:38:02 +02:00
LaTeX-item-indent 0)
(when +latex--company-backends
(set-company-backend! 'latex-mode +latex--company-backends))
2018-07-18 13:38:02 +02:00
;; Set custom item indentation
(dolist (env '("itemize" "enumerate" "description"))
2018-07-18 12:15:55 +02:00
(add-to-list 'LaTeX-indent-environment-list `(,env +latex/LaTeX-indent-item))))
2018-07-30 02:38:42 +02:00
(def-package! preview
:hook (LaTeX-mode . LaTeX-preview-setup)
:config
(setq-default preview-scale 1.4
preview-scale-function
(lambda () (* (/ 10.0 (preview-document-pt)) preview-scale))))
2018-07-30 02:38:42 +02:00
;; Nicely indent lines that have wrapped when visual line mode is activated
(def-package! adaptive-wrap
:hook (LaTeX-mode . adaptive-wrap-prefix-mode)
:init (setq-default adaptive-wrap-extra-indent 0))
(def-package! auctex-latexmk
:when (featurep! +latexmk)
:after latex
:init
;; Pass the -pdf flag when TeX-PDF-mode is active
(setq auctex-latexmk-inherit-TeX-PDF-mode t)
;; Set LatexMk as the default
(setq-hook! LaTeX-mode TeX-command-default "LatexMk")
:config
;; Add latexmk as a TeX target
(auctex-latexmk-setup))
2018-01-04 14:50:59 -05:00
(def-package! company-auctex
:when (featurep! :completion company)
:defer t
:init
(add-to-list '+latex--company-backends #'company-auctex-environments nil #'eq)
(add-to-list '+latex--company-backends #'company-auctex-macros nil #'eq))
(def-package! company-math
:when (featurep! :completion company)
:defer t
:init
(add-to-list '+latex--company-backends #'+latex-symbols-company-backend nil #'eq))
2018-07-18 12:12:15 +02:00
2018-07-30 02:38:42 +02:00
;; bibtex + reftex
2018-07-18 12:12:15 +02:00
(load! "+ref")