summaryrefslogtreecommitdiffstats
path: root/ravi-init-tex.el
diff options
context:
space:
mode:
authorRavi R Kiran <aine.marina@gmail.com>2014-02-17 06:01:18 (GMT)
committerRavikiran Rajagopal <aine.marina@gmail.com>2014-02-17 06:01:18 (GMT)
commit34c1f5cd6f3df04869725f346a2367344a5fe379 (patch)
tree16b2e4c49823f998b4a376c5b7fd411e1afadb02 /ravi-init-tex.el
parentbf553b26b6c6b191dee6e1628f065371a81f33dd (diff)
downloaddotemacs-34c1f5cd6f3df04869725f346a2367344a5fe379.zip
dotemacs-34c1f5cd6f3df04869725f346a2367344a5fe379.tar.gz
dotemacs-34c1f5cd6f3df04869725f346a2367344a5fe379.tar.bz2
TeX support
Diffstat (limited to 'ravi-init-tex.el')
-rw-r--r--ravi-init-tex.el178
1 files changed, 178 insertions, 0 deletions
diff --git a/ravi-init-tex.el b/ravi-init-tex.el
new file mode 100644
index 0000000..4bb9349
--- /dev/null
+++ b/ravi-init-tex.el
@@ -0,0 +1,178 @@
+;;; 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 ?' ".")
+
+ (use-package ac-math
+ :ensure t
+ )
+
+ (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-suscript '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)
+
+ ;; 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)
+
+ (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)
+ (keyadvice-mode t)
+
+ (LaTeX-add-environments
+ '("derivation" LaTeX-env-label))
+ (TeX-add-symbols '("emph" 1))
+
+ (setq fill-column 100000)
+
+ (setq ac-sources
+ (append '(ac-source-math-unicode ac-source-math-latex ac-source-latex-commands)
+ ac-sources))
+ (auto-complete-mode 1)
+
+ (message "LaTeX mode init complete."))
+ ;; ACUTeX replaces latex-mode-hook with LaTeX-mode-hook
+ (add-hook 'LaTeX-mode-hook 'my-LaTeX-mode-init)
+
+ ;; Why does this not work?
+ (keyadvice-add-advice (kbd "`")
+ (if (and (eq major-mode 'latex-mode) (texmathp))
+ (let* ((events (let ((overriding-local-map LaTeX-math-keymap))
+ (read-key-sequence "math: ")))
+ (binding (lookup-key LaTeX-math-keymap events)))
+ (call-interactively binding))
+ keyadvice-do-it))))
+ )
+ )
+
+(provide 'ravi-init-tex)
+;;; ravi-init-tex.el ends here