(load "auctex.el" nil t t) (setq TeX-auto-save t TeX-parse-self t TeX-insert-braces nil) (setq-default TeX-master nil) (setq font-latex-fontify-script nil) (setq LaTeX-equation-label "e_") (setq LaTeX-section-label "s_") (setq LaTeX-figure-label "f_") (setq TeX-fold-ellipsis " …") (require 'reftex) (defun dabbrev-expand-helper () (interactive) (call-interactively 'dabbrev-expand)) (defun add-delimiter (delim-begin delim-end r-begin r-end) "Add the pair of delimiters given in delim at the ends of the region if it is activated" (interactive "cBegin delimiter: \ncEnd delimiter: \nr") (if (use-region-p) (progn (save-excursion (goto-char r-end) (insert delim-end) (goto-char r-begin) (insert delim-begin))) (progn (save-excursion (insert delim-end)) (insert delim-begin)))) (add-hook 'LaTeX-mode-hook (lambda () (turn-on-auto-fill) (subword-mode) (TeX-fold-mode 1) ;; Move around commands in the Right Way™ (modify-syntax-entry ?\\ "w" LaTeX-mode-syntax-table) (setq subword-forward-regexp "\\W*\\(\\([\\\\[:upper:]]*\\W?\\)[[:lower:][:digit:]]*\\)") (setq subword-backward-regexp "\\(\\(\\W\\|[[:lower:][:digit:]]\\)\\([\\\\[:upper:]]+\\W*\\)\\|\\W\\w+\\)") ;; ;; FIXME: this breaks sourcepair for other modes. ;; (setq sourcepair-source-extensions '(".tex")) ;; (setq sourcepair-header-extensions '(".p.tex")) (define-key LaTeX-mode-map (kbd "C-c C-v") (lambda (arg) (interactive "P") (insert "~") (if arg (TeX-insert-macro "eqref") (TeX-insert-macro "ref")))) (define-key LaTeX-mode-map (kbd "C-M-") (lambda (arg) (interactive "P") (if arg (LaTeX-insert-environment "align") (LaTeX-insert-environment "align*")))) (define-key LaTeX-mode-map (kbd "S-SPC") (lambda() (interactive) (insert "\\"))) (define-key LaTeX-mode-map (kbd "M-S-SPC") 'TeX-insert-braces) (define-key LaTeX-mode-map (kbd "s-SPC") (lambda() (interactive) (insert "~"))) (define-key LaTeX-mode-map (kbd "M-_") (lambda (r-begin r-end) (interactive "r") (add-delimiter "_{" "}" r-begin r-end))) (define-key LaTeX-mode-map (kbd "M-^") (lambda (r-begin r-end) (interactive "r") (add-delimiter "^{" "}" r-begin r-end))) (define-key LaTeX-mode-map (kbd "M-|") (lambda (r-begin r-end) (interactive "r") (add-delimiter "|" "|" r-begin r-end))) (define-key LaTeX-mode-map (kbd "M-$") (lambda (r-begin r-end) (interactive "r") (message "deprecated") (add-delimiter "$" "$" r-begin r-end))) ;; This overlaps with the spell-checker; not that I ever remember that key ;; This is the rationale: C-M-SPC starts inline math C-M-RET starts display math (define-key LaTeX-mode-map (kbd "C-M-SPC") (lambda (r-begin r-end) (interactive "r") (add-delimiter "$" "$" r-begin r-end))) (define-key LaTeX-mode-map (kbd "C-c C-d") (lambda (arg r-begin r-end) (interactive "P\nr") (if arg (add-delimiter "\\todo[inline]{" "}{}" r-begin r-end) (add-delimiter "\\todo{" "}{}" r-begin r-end)))) (define-key LaTeX-mode-map (kbd "C-M-d") 'kill-sexp) (define-key LaTeX-mode-map (kbd "C-M-i") 'down-list) ;; -i stands for /in/ (define-key LaTeX-mode-map (kbd "C-M-o") 'up-list) ;; -o stands for /out/ (define-key LaTeX-mode-map (kbd "=") 'insert-char-with-padding) (define-key LaTeX-mode-map (kbd "≠") 'insert-char-with-padding) (define-key LaTeX-mode-map (kbd ">") 'insert-char-with-padding) (define-key LaTeX-mode-map (kbd "<") 'insert-char-with-padding) (define-key LaTeX-mode-map (kbd "≥") 'insert-char-with-padding) (define-key LaTeX-mode-map (kbd "≤") 'insert-char-with-padding) (define-key LaTeX-mode-map (kbd "⇒") 'insert-char-with-padding) (define-key LaTeX-mode-map (kbd "∩") 'insert-char-with-padding) (define-key LaTeX-mode-map (kbd "∪") 'insert-char-with-padding) (define-key LaTeX-mode-map (kbd "∨") 'insert-char-with-padding) (define-key LaTeX-mode-map (kbd "∧") 'insert-char-with-padding) (define-key LaTeX-mode-map (kbd "×") 'insert-char-with-padding) ;; ;; Unicode shortcuts… ;; (define-key LaTeX-mode-map (kbd "α") (lambda() (interactive) (insert "\\alpha"))) ;; (define-key LaTeX-mode-map (kbd "β") (lambda() (interactive) (insert "\\beta"))) ;; (define-key LaTeX-mode-map (kbd "δ") (lambda() (interactive) (insert "\\delta"))) ;; (define-key LaTeX-mode-map (kbd "Δ") (lambda() (interactive) (insert "\\Delta"))) ;; (define-key LaTeX-mode-map (kbd "θ") (lambda() (interactive) (insert "\\theta"))) ;; (define-key LaTeX-mode-map (kbd "Θ") (lambda() (interactive) (insert "\\Theta"))) ;; (define-key LaTeX-mode-map (kbd "λ") (lambda() (interactive) (insert "\\lambda"))) ;; (define-key LaTeX-mode-map (kbd "Λ") (lambda() (interactive) (insert "\\Lambda"))) ;; (define-key LaTeX-mode-map (kbd "ω") (lambda() (interactive) (insert "\\omega"))) ;; (define-key LaTeX-mode-map (kbd "Ω") (lambda() (interactive) (insert "\\Omega"))) ;; (define-key LaTeX-mode-map (kbd "∈") (lambda() (interactive) (insert "\\in"))) ;; (define-key LaTeX-mode-map (kbd "ℓ") (lambda() (interactive) (insert "\\ell"))) )) ;; this reimplements TeX-insert-braces to work with negative argument (defun TeX-insert-braces (arg) "Make a pair of braces around next ARG sexps and leave point inside. No argument is equivalent to zero: just insert braces and leave point between. If there is an active region, ARG will be ignored, braces will be inserted around the region, and point will be left after the closing brace." (interactive "P") (if (TeX-active-mark) (progn (if (< (point) (mark)) (exchange-point-and-mark)) (insert TeX-grcl) (save-excursion (goto-char (mark)) (insert TeX-grop))) (if (and arg (< arg 0)) (progn (save-excursion (backward-sexp (prefix-numeric-value (- 0 arg))) (insert TeX-grop)) (insert TeX-grcl)) (insert TeX-grop) (save-excursion (if arg (forward-sexp (prefix-numeric-value arg))) (insert TeX-grcl))))) (defun TeX-back-insert-braces (arg) (interactive "P") (if arg (TeX-insert-braces (- 0 arg)) (insert TeX-grcl))) (defun insert-char-with-padding (arg) (interactive "*P") (if (string= (string (preceding-char)) " ") () (if (string= (string (preceding-char)) "\&") () (insert " "))) (self-insert-command (prefix-numeric-value arg)) (if (string= (string (following-char)) " ") () (insert " ")) ;; decide what to do with the point ) (load "latex-compile-filters.el")