summaryrefslogtreecommitdiffstats
path: root/lisp/ravi-init-tex.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/ravi-init-tex.el')
-rw-r--r--lisp/ravi-init-tex.el189
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