diff options
Diffstat (limited to 'lisp/ravi-init-tex.el')
| -rw-r--r-- | lisp/ravi-init-tex.el | 189 |
1 files changed, 189 insertions, 0 deletions
diff --git a/lisp/ravi-init-tex.el b/lisp/ravi-init-tex.el new file mode 100644 index 0000000..d7725e9 --- /dev/null +++ b/lisp/ravi-init-tex.el @@ -0,0 +1,189 @@ +;;; ravi-init-tex.el --- tex and friends + +;; Copyright (C) 2014 + +;; Author: <ravi@nero.lan> +;; Keywords: + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see <http://www.gnu.org/licenses/>. + +;;; Commentary: + +;; TeX and LaTeX support + +;;; Code: + +(use-package tex-site + :ensure auctex + :mode ("\\.tex\\'" . TeX-latex-mode) + :commands (TeX-latex-mode + TeX-mode + tex-mode + LaTeX-mode + latex-mode) + :config + (progn + (use-package latex + :config + (progn + (use-package reftex + :defer t + :diminish reftex-mode) + ;; fix the "bug" in SP regexp wrap that treats ' as "word" + (modify-syntax-entry ?' ".") + + (require 'smartparens-latex) + (sp-local-pair 'latex-mode "\\begin" "\\end") + (sp-local-tag 'latex-mode "\\ba" "\\begin{align*}" "\\end{align*}") + + (use-package preview) + (use-package font-latex) + (fset 'tex-font-lock-subscript 'ignore) + + (sp-with-modes '(tex-mode plain-tex-mode latex-mode) + (sp-local-pair "\\[" nil :post-handlers '(my-latex-math-block-indent))) + + (defun my-latex-math-block-indent (a action c) + (when (eq action 'insert) + (newline-and-indent) + (save-excursion (newline)))) + + (defun my-latex-compile () + (interactive) + (save-buffer) + (TeX-command "LaTeX" 'TeX-master-file nil)) + (bind-key "C-M-x" 'my-latex-compile LaTeX-mode-map) + + (defvar my-latex-wrap-choices '("emph" + "textsc")) + (defvar my-latex-wrap-history nil) + + (defun my-latex-wrap (macro-name) + (interactive (list (ido-completing-read + "Macro> " + my-latex-wrap-choices + nil 'confirm nil my-latex-wrap-history))) + (when (use-region-p) + (let ((b (region-beginning)) + (e (region-end))) + (goto-char e) + (insert "}") + (goto-char b) + (insert "\\" macro-name "{")))) + (bind-key "C-c w" 'my-latex-wrap LaTeX-mode-map) + + (defun my-end-of-environment () + (interactive) + (LaTeX-mark-environment) + (end-of-region)) + + (defun my-beginning-of-environment () + (interactive) + (LaTeX-mark-environment) + (beginning-of-region) + (deactivate-mark)) + + (bind-key "M-n" 'my-end-of-environment LaTeX-mode-map) + (bind-key "M-p" 'my-beginning-of-environment LaTeX-mode-map) + + ;; Use okular rather than evince + (setq TeX-view-program-selection + '((output-dvi "Okular") + (output-pdf "Okular"))) + + ;; fix italian quote highlight + (push '("\"<" "\">") font-latex-quote-list) + + (defun my-latex-remove-command () + "Unwrap the expression that point is in or before, also +removing the command name. By command we understand a symbol +starting with \\ and followed by a block of text enclosed in {}." + (interactive) + (let ((ok (sp-get-enclosing-sexp))) + (cond + ;; we're inside the { } block + (ok + (progn + (save-excursion + (goto-char (sp-get ok :beg)) + (zap-to-char -1 ?\\ )) + (sp-splice-sexp))) + ;; test if we are in looking at the command fromt he front + ((looking-at "\\\\") + (zap-up-to-char 1 ?{) + (sp-unwrap-sexp)) + ;; otherwise we're inside the command name + (t + (zap-to-char -1 ?\\ ) + (zap-up-to-char 1 ?{) + (sp-unwrap-sexp))))) + (bind-key "C-c d" 'my-latex-remove-command LaTeX-mode-map) + (bind-key "M-RET" 'LaTeX-insert-item LaTeX-mode-map) + + (use-package company-math + :config + (progn + (defun ravi/company-math-setup () + (setq-local company-backends + (append '(company-math-symbols-latex company-latex-commands) + company-backends))) + (add-hook 'TeX-mode-hook 'ravi/company-math-setup)) + :ensure t) + + (use-package latex-extra + :config + (progn + (add-hook 'LaTeX-mode-hook 'latex-extra-mode)) + :diminish latex-extra-mode + :ensure t) + + (defun my-LaTeX-preview-math () + (interactive) + (let ((b (save-excursion (while (texmathp) (backward-char 1)) (1- (point)))) + (e (save-excursion (while (texmathp) (forward-char 1)) (point)))) + (preview-region b e))) + (bind-key "C-<m-key>" 'my-LaTeX-preview-math preview-map) + + (defun my-LaTeX-mode-init () + (setq TeX-auto-save t) + (setq TeX-parse-self t) + (TeX-PDF-mode t) + (setq reftex-plug-into-AUCTeX t) + (reftex-mode t) + (TeX-fold-mode t) + + (smartparens-mode 1) + + (LaTeX-add-environments + '("derivation" LaTeX-env-label)) + (TeX-add-symbols '("emph" 1)) + + (setq fill-column 88) + + ;; Add XeLaTeX support to AucTeX + (add-to-list 'TeX-command-list '("XeLaTeX" "%`xelatex%(mode)%' %t" TeX-run-TeX nil t)) + (setq TeX-command-default "XeLaTeX") + (setq TeX-save-query nil) + (setq TeX-show-compilation t) + + (message "LaTeX mode init complete.")) + ;; ACUTeX replaces latex-mode-hook with LaTeX-mode-hook + (add-hook 'LaTeX-mode-hook 'my-LaTeX-mode-init) + + )) + ) + ) + +(provide 'ravi-init-tex) +;;; ravi-init-tex.el ends here |
