diff options
| author | Ravi R Kiran <aine.marina@gmail.com> | 2014-02-17 06:01:18 (GMT) |
|---|---|---|
| committer | Ravikiran Rajagopal <aine.marina@gmail.com> | 2014-02-17 06:01:18 (GMT) |
| commit | 34c1f5cd6f3df04869725f346a2367344a5fe379 (patch) | |
| tree | 16b2e4c49823f998b4a376c5b7fd411e1afadb02 /ravi-init-tex.el | |
| parent | bf553b26b6c6b191dee6e1628f065371a81f33dd (diff) | |
| download | dotemacs-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.el | 178 |
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 |
