Merge pull request #754 from patrl/latexRefactor
DONE: large refactor of latex
This commit is contained in:
commit
6bcc01f591
6 changed files with 160 additions and 171 deletions
13
modules/lang/latex/+latexmk.el
Normal file
13
modules/lang/latex/+latexmk.el
Normal file
|
@ -0,0 +1,13 @@
|
|||
;;; lang/latex/+latexmk.el -*- lexical-binding: t; -*-
|
||||
;;;###if (featurep! +latexmk)
|
||||
|
||||
(def-package! auctex-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))
|
16
modules/lang/latex/+preview-pane.el
Normal file
16
modules/lang/latex/+preview-pane.el
Normal file
|
@ -0,0 +1,16 @@
|
|||
;;; lang/latex/+preview-pane.el -*- lexical-binding: t; -*-
|
||||
;;;###if (featurep! +preview-pane)
|
||||
|
||||
(def-package! latex-preview-pane
|
||||
:when (featurep! +preview-pane)
|
||||
:hook (LaTeX-mode . latex-preview-pane-enable)
|
||||
:commands latex-preview-pane-mode
|
||||
:init
|
||||
(setq latex-preview-pane-multifile-mode 'auctex)
|
||||
:config
|
||||
(add-to-list 'TeX-view-program-list '("preview-pane" latex-preview-pane-mode))
|
||||
(add-to-list 'TeX-view-program-selection '(output-pdf "preview-pane"))
|
||||
(define-key! doc-view-mode-map
|
||||
(kbd "ESC") #'delete-window
|
||||
"q" #'delete-window
|
||||
"k" (λ! (quit-window) (delete-window))))
|
44
modules/lang/latex/+ref.el
Normal file
44
modules/lang/latex/+ref.el
Normal file
|
@ -0,0 +1,44 @@
|
|||
;;; lang/latex/+ref.el -*- lexical-binding: t; -*-
|
||||
|
||||
(def-package! reftex
|
||||
:hook (LaTeX-mode . reftex-mode)
|
||||
:config
|
||||
;; set up completion for citations and references
|
||||
(set-company-backend! 'reftex-mode 'company-reftex-labels 'company-reftex-citations)
|
||||
;; Get ReTeX working with biblatex
|
||||
;; http://tex.stackexchange.com/questions/31966/setting-up-reftex-with-biblatex-citation-commands/31992#31992
|
||||
(setq reftex-cite-format
|
||||
'((?a . "\\autocite[]{%l}")
|
||||
(?b . "\\blockcquote[]{%l}{}")
|
||||
(?c . "\\cite[]{%l}")
|
||||
(?f . "\\footcite[]{%l}")
|
||||
(?n . "\\nocite{%l}")
|
||||
(?p . "\\parencite[]{%l}")
|
||||
(?s . "\\smartcite[]{%l}")
|
||||
(?t . "\\textcite[]{%l}"))
|
||||
reftex-plug-into-AUCTeX t
|
||||
reftex-toc-split-windows-fraction 0.3)
|
||||
(unless (string-empty-p +latex-bibtex-file)
|
||||
(setq reftex-default-bibliography (list (expand-file-name +latex-bibtex-file))))
|
||||
(map! :map reftex-mode-map
|
||||
:localleader :n ";" 'reftex-toc)
|
||||
(add-hook! 'reftex-toc-mode-hook
|
||||
(reftex-toc-rescan)
|
||||
(map! :local
|
||||
:e "j" #'next-line
|
||||
:e "k" #'previous-line
|
||||
:e "q" #'kill-buffer-and-window
|
||||
:e "ESC" #'kill-buffer-and-window)))
|
||||
|
||||
;; set up mode for bib files
|
||||
(after! bibtex
|
||||
(setq bibtex-dialect 'biblatex
|
||||
bibtex-align-at-equal-sign t
|
||||
bibtex-text-indentation 20)
|
||||
(define-key bibtex-mode-map (kbd "C-c \\") #'bibtex-fill-entry))
|
||||
|
||||
(after! bibtex-completion
|
||||
(unless (string-empty-p +latex-bibtex-file)
|
||||
(setq bibtex-completion-bibliography (list (expand-file-name +latex-bibtex-file)))))
|
||||
|
||||
|
22
modules/lang/latex/+viewers.el
Normal file
22
modules/lang/latex/+viewers.el
Normal file
|
@ -0,0 +1,22 @@
|
|||
;;; lang/latex/+viewers.el -*- lexical-binding: t; -*-
|
||||
|
||||
(when (featurep! +okular)
|
||||
;; Configure Okular as viewer. Including a bug fix
|
||||
;; (https://bugs.kde.org/show_bug.cgi?id=373855)
|
||||
(add-to-list 'TeX-view-program-list '("Okular" ("okular --unique file:%o" (mode-io-correlate "#src:%n%a"))))
|
||||
(add-to-list 'TeX-view-program-selection '(output-pdf "Okular")))
|
||||
|
||||
;; Or Skim
|
||||
(when (featurep! +skim)
|
||||
(add-to-list 'TeX-view-program-selection 'output-pdf '("Skim")))
|
||||
|
||||
;; Or Zathura
|
||||
(when (featurep! +zathura)
|
||||
(add-to-list 'TeX-view-program-selection '(output-pdf "Zathura")))
|
||||
|
||||
;; Or PDF-tools, but only if the module is also loaded
|
||||
(when (and (featurep! :tools pdf)
|
||||
(featurep! +pdf-tools))
|
||||
(add-to-list 'TeX-view-program-selection '(output-pdf "PDF Tools"))
|
||||
;; Update PDF buffers after successful LaTeX runs
|
||||
(add-hook 'TeX-after-compilation-finished-function #'TeX-revert-document-buffer))
|
|
@ -1,14 +1,10 @@
|
|||
;;; lang/latex/config.el -*- lexical-binding: t; -*-
|
||||
|
||||
(defvar +latex-bibtex-file ""
|
||||
"File AUCTeX (specifically RefTeX) uses to search for citations.")
|
||||
|
||||
(defvar +latex-bibtex-dir ""
|
||||
"Where bibtex files are kept.")
|
||||
|
||||
(defvar +latex-indent-level-item-continuation 4
|
||||
"Custom indentation level for items in enumeration-type environments")
|
||||
|
||||
(defvar +latex-bibtex-file ""
|
||||
"File AUCTeX (specifically RefTeX) uses to search for citations.")
|
||||
|
||||
;;
|
||||
;; Plugins
|
||||
|
@ -17,33 +13,47 @@
|
|||
;; sp's default rules are obnoxious, so disable them
|
||||
(provide 'smartparens-latex)
|
||||
|
||||
(after! tex
|
||||
;; Set some varibles to fontify common LaTeX commands.
|
||||
(def-package! tex
|
||||
:mode ("\\.tex\\'" . TeX-latex-mode)
|
||||
:hook (TeX-mode . visual-line-mode)
|
||||
:config
|
||||
;; fontify common latex commands
|
||||
(load! "+fontification")
|
||||
|
||||
(setq TeX-parse-self t ; Enable parse on load.
|
||||
TeX-save-query nil ; just save, don't ask
|
||||
TeX-auto-save t ; Enable parse on save.
|
||||
;; Use hidden directories for AUCTeX files.
|
||||
;; select viewer
|
||||
(load! "+viewers")
|
||||
(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"
|
||||
;; When correlating sources to rendered PDFs, don't start the emacs
|
||||
;; server
|
||||
TeX-source-correlate-start-server nil
|
||||
TeX-source-correlate-mode t
|
||||
TeX-source-correlate-method 'synctex
|
||||
;; Fonts for section, subsection, etc
|
||||
font-latex-fontify-sectioning 1.15)
|
||||
;; 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)
|
||||
;; prompt for master
|
||||
(setq-default TeX-master nil)
|
||||
;; Display the output of the latex commands in a popup.
|
||||
;; set-up chktex
|
||||
(setcar (cdr (assoc "Check" TeX-command-list)) "chktex -v6 -H %s")
|
||||
;; tell emacs how to parse tex files
|
||||
(add-hook! 'tex-mode-hook (setq ispell-parser 'tex))
|
||||
;; display output of latex commands in popup
|
||||
(set-popup-rule! " output\\*$" :size 15)
|
||||
;; Do not prompt for Master files, this allows auto-insert to add templates to
|
||||
;; .tex files
|
||||
(add-hook! 'TeX-mode-hook (remove-hook 'find-file-hook
|
||||
(cl-find-if #'byte-code-function-p find-file-hook)
|
||||
'local))
|
||||
;; Enable rainbow mode after applying styles to the buffer
|
||||
(add-hook 'TeX-update-style-hook #'rainbow-delimiters-mode)
|
||||
(add-hook 'TeX-mode-hook #'visual-line-mode)
|
||||
(when (featurep! :feature spellcheck)
|
||||
(add-hook 'TeX-mode-hook #'flyspell-mode :append)))
|
||||
|
||||
;; TeX Font Styling
|
||||
;; (def-package! tex-style :defer t)
|
||||
|
||||
;; TeX Folding
|
||||
(add-hook 'TeX-mode-hook #'TeX-fold-mode))
|
||||
|
||||
; Fold TeX macros
|
||||
(def-package! tex-fold
|
||||
:hook (TeX-mode . TeX-fold-mode))
|
||||
|
||||
(after! latex
|
||||
(setq LaTeX-section-hook ; Add the toc entry to the sectioning hooks.
|
||||
|
@ -53,62 +63,12 @@
|
|||
LaTeX-section-section
|
||||
LaTeX-section-label)
|
||||
LaTeX-fill-break-at-separators nil
|
||||
LaTeX-item-indent 0) ; item indentation.
|
||||
|
||||
(define-key LaTeX-mode-map "\C-j" nil)
|
||||
|
||||
;; Do not prompt for Master files, this allows auto-insert to add templates to
|
||||
;; .tex files
|
||||
(add-hook! '(LaTeX-mode-hook TeX-mode-hook)
|
||||
(remove-hook 'find-file-hook
|
||||
(cl-find-if #'byte-code-function-p find-file-hook)
|
||||
'local))
|
||||
;; Adding useful things for latex
|
||||
(add-hook! 'LaTeX-mode-hook
|
||||
#'(LaTeX-math-mode
|
||||
TeX-source-correlate-mode
|
||||
TeX-global-PDF-mode
|
||||
TeX-PDF-mode
|
||||
visual-line-mode))
|
||||
;; Enable rainbow mode after applying styles to the buffer
|
||||
(add-hook 'TeX-update-style-hook #'rainbow-delimiters-mode)
|
||||
(when (featurep! :feature spellcheck)
|
||||
(add-hook 'LaTeX-mode-hook #'flyspell-mode :append))
|
||||
;; Use chktex to search for errors in a latex file.
|
||||
(setcar (cdr (assoc "Check" TeX-command-list)) "chktex -v6 %s")
|
||||
;; Set a custom item indentation
|
||||
LaTeX-item-indent 0)
|
||||
;; Set custom item indentation
|
||||
(dolist (env '("itemize" "enumerate" "description"))
|
||||
(add-to-list 'LaTeX-indent-environment-list `(,env +latex/LaTeX-indent-item)))
|
||||
(add-to-list 'LaTeX-indent-environment-list `(,env +latex/LaTeX-indent-item))))
|
||||
|
||||
;;
|
||||
;; Use Okular if the user says so.
|
||||
(when (featurep! +okular)
|
||||
;; Configure Okular as viewer. Including a bug fix
|
||||
;; (https://bugs.kde.org/show_bug.cgi?id=373855)
|
||||
(add-to-list 'TeX-view-program-list '("Okular" ("okular --unique file:%o" (mode-io-correlate "#src:%n%a"))))
|
||||
(add-to-list 'TeX-view-program-selection '(output-pdf "Okular")))
|
||||
|
||||
;; Or Skim
|
||||
(when (featurep! +skim)
|
||||
(add-to-list 'TeX-view-program-list '("Skim" "/Applications/Skim.app/Contents/SharedSupport/displayline -b -g %n %o %b"))
|
||||
(add-to-list 'TeX-view-program-selection 'output-pdf '("Skim")))
|
||||
|
||||
;; Or Zathura
|
||||
(when (featurep! +zathura)
|
||||
(add-to-list 'TeX-view-program-selection '(output-pdf "Zathura")))
|
||||
|
||||
;; Or PDF-tools, but only if the module is also loaded
|
||||
(when (and (featurep! :tools pdf)
|
||||
(featurep! +pdf-tools))
|
||||
(add-to-list 'TeX-view-program-list '("PDF Tools" "TeX-pdf-tools-sync-view"))
|
||||
(add-to-list 'TeX-view-program-selection '(output-pdf "PDF Tools"))
|
||||
;; Enable auto reverting the PDF document with PDF Tools
|
||||
(add-hook 'TeX-after-compilation-finished-functions #'TeX-revert-document-buffer)))
|
||||
|
||||
|
||||
;; The preview package is currently broken with the latest AUCTeX version
|
||||
;; ("11.90.2.2017-07-25) ... and Ghostscript 9.22. It's now fixed in AUCTeX
|
||||
;; master, so we just have to wait.
|
||||
;; set-up preview package
|
||||
(def-package! preview
|
||||
:hook (LaTeX-mode . LaTeX-preview-setup)
|
||||
:config
|
||||
|
@ -116,105 +76,38 @@
|
|||
preview-scale-function
|
||||
(lambda () (* (/ 10.0 (preview-document-pt)) preview-scale))))
|
||||
|
||||
|
||||
(def-package! latex-preview-pane
|
||||
:when (featurep! +preview-pane)
|
||||
:hook ((latex-mode LaTeX-mode) . latex-preview-pane-enable)
|
||||
:commands latex-preview-pane-mode
|
||||
:init
|
||||
(setq latex-preview-pane-multifile-mode 'auctex)
|
||||
:config
|
||||
(add-to-list 'TeX-view-program-list '("preview-pane" latex-preview-pane-mode))
|
||||
(add-to-list 'TeX-view-program-selection '(output-pdf "preview-pane"))
|
||||
(define-key! doc-view-mode-map
|
||||
(kbd "ESC") #'delete-window
|
||||
"q" #'delete-window
|
||||
"k" (λ! (quit-window) (delete-window))))
|
||||
|
||||
|
||||
(def-package! reftex
|
||||
:hook ((latex-mode LaTeX-mode) . turn-on-reftex)
|
||||
:init
|
||||
(setq reftex-plug-into-AUCTeX t
|
||||
reftex-toc-split-windows-fraction 0.3)
|
||||
:config
|
||||
;; Get ReTeX working with biblatex
|
||||
;; http://tex.stackexchange.com/questions/31966/setting-up-reftex-with-biblatex-citation-commands/31992#31992
|
||||
(setq reftex-cite-format
|
||||
'((?t . "\\textcite[]{%l}")
|
||||
(?a . "\\autocite[]{%l}")
|
||||
(?c . "\\cite[]{%l}")
|
||||
(?s . "\\smartcite[]{%l}")
|
||||
(?f . "\\footcite[]{%l}")
|
||||
(?n . "\\nocite{%l}")
|
||||
(?b . "\\blockcquote[]{%l}{}")))
|
||||
(unless (string-empty-p +latex-bibtex-file)
|
||||
(setq reftex-default-bibliography (list (expand-file-name +latex-bibtex-file))))
|
||||
(map! :map reftex-mode-map
|
||||
:localleader :n ";" 'reftex-toc)
|
||||
(add-hook! 'reftex-toc-mode-hook
|
||||
(reftex-toc-rescan)
|
||||
(map! :local
|
||||
:e "j" #'next-line
|
||||
:e "k" #'previous-line
|
||||
:e "q" #'kill-buffer-and-window
|
||||
:e "ESC" #'kill-buffer-and-window)))
|
||||
|
||||
|
||||
(def-package! bibtex
|
||||
:defer t
|
||||
:config
|
||||
(setq bibtex-dialect 'biblatex
|
||||
bibtex-align-at-equal-sign t
|
||||
bibtex-text-indentation 20)
|
||||
(define-key bibtex-mode-map (kbd "C-c \\") #'bibtex-fill-entry))
|
||||
|
||||
|
||||
(def-package! auctex-latexmk
|
||||
:when (featurep! +latexmk)
|
||||
:after-call (latex-mode-hook LaTeX-mode-hook)
|
||||
: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))
|
||||
|
||||
|
||||
(def-package! ivy-bibtex
|
||||
:when (featurep! :completion ivy)
|
||||
:commands ivy-bibtex
|
||||
)
|
||||
|
||||
|
||||
(def-package! helm-bibtex
|
||||
:when (featurep! :completion helm)
|
||||
:commands helm-bibtex
|
||||
)
|
||||
|
||||
(after! bibtex-completion
|
||||
(unless (string-empty-p +latex-bibtex-file)
|
||||
(setq bibtex-completion-bibliography (list (expand-file-name +latex-bibtex-file))))
|
||||
(unless (string-empty-p +latex-bibtex-dir)
|
||||
(setq bibtex-completion-library-path (list +latex-bibtex-dir)
|
||||
bibtex-completion-notes-path (expand-file-name "notes.org" +latex-bibtex-dir))))
|
||||
|
||||
(defvar +latex--company-backends nil)
|
||||
|
||||
(def-package! company-auctex
|
||||
:when (featurep! :completion company)
|
||||
:commands (company-auctex-init)
|
||||
: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))
|
||||
|
||||
(when +latex--company-backends
|
||||
;; We can't use the `set-company-backend!' because Auctex reports its
|
||||
;; major-mode as `latex-mode', but uses LaTeX-mode-hook for its mode, which is
|
||||
;; not something `set-company-backend!' anticipates (and shouldn't have to!)
|
||||
(add-hook! LaTeX-mode
|
||||
(make-local-variable 'company-backends)
|
||||
(company-auctex-init)))
|
||||
|
||||
(add-hook! 'LaTeX-mode-hook (add-to-list (make-local-variable 'company-backends) +latex--company-backends)))
|
||||
|
||||
;; 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))
|
||||
|
||||
;; referencing + bibtex setup
|
||||
(load! "+ref")
|
||||
|
||||
;;
|
||||
;; Sub-modules
|
||||
;;
|
||||
|
||||
(if (featurep! +latexmk) (load! "+latexmk"))
|
||||
(if (featurep! +preview-pane) (load! "+preview-pane"))
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
;;; lang/latex/packages.el
|
||||
|
||||
(package! auctex)
|
||||
(package! flyspell)
|
||||
(package! adaptive-wrap)
|
||||
|
||||
;; Optional module features:
|
||||
|
@ -16,7 +15,9 @@
|
|||
;; Features according to other user selected options
|
||||
|
||||
(when (featurep! :completion company)
|
||||
(package! company-auctex))
|
||||
(package! company-auctex)
|
||||
(package! company-reftex)
|
||||
(package! company-math))
|
||||
(when (featurep! :completion ivy)
|
||||
(package! ivy-bibtex))
|
||||
(when (featurep! :completion helm)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue