Difference between revisions of "AUCTeX"
Jump to navigation
Jump to search
Line 194: | Line 194: | ||
(require 'mmm-mode) | (require 'mmm-mode) | ||
(setq mmm-global-mode 'maybe) | (setq mmm-global-mode 'maybe) | ||
− | (mmm-add-group 'context-mp | + | (mmm-add-group |
− | + | 'context-mp | |
− | + | '((context-MP | |
− | + | :submode metapost-mode | |
− | + | :face mmm-code-submode-face | |
− | + | :front ".*\\\\start\\w*MP\\w*\\({\\w*}\\|\\[\\w*\\]\\|\\)\\W" | |
− | + | :back ".*\\\\stop\\w*MP"))) | |
− | + | (add-to-list | |
− | + | 'mmm-mode-ext-classes-alist | |
− | (add-to-list 'mmm-mode-ext-classes-alist '(nil | + | '(context-mode nil context-mp)) |
− | |||
</pre> | </pre> |
Revision as of 19:50, 9 May 2006
Help with delimters and math mode
These customizations are mostly for faster insertion of special characters (and math mode).
;;; Useful AUCTeX setup for ConTeXt (for your .emacs) ;;; Sanjoy Mahajan (sanjoy@mrao.cam.ac.uk), 2006-04-20. No copyright. ;;; ;;; With recent AUCTeX (11.50 or later), editing ConTeXt files should ;;; just work, but I use the following elisp as well. ; the AUCTeX manual recommends these settings (setq TeX-parse-self t) ; Enable parse on load. (setq TeX-auto-save t) ; Enable parse on save. ; for outline views (hide/show sections, chapters, etc.) (add-hook 'TeX-mode-hook '(lambda () (TeX-fold-mode 1))) (add-hook 'TeX-mode-hook '(lambda () (outline-minor-mode 1))) ; make PDF by default (can toggle with C-c C-t C-p (add-hook 'TeX-mode-hook '(lambda () (TeX-PDF-mode 1))) ; these math abbrevs (` as prefix char) are also useful in TeX/ConTeXt files (require 'latex) ; defines LaTeX-math-mode (add-hook 'TeX-mode-hook 'LaTeX-math-mode) ; Emacs help for \label, \ref, \cite. Normally used only with ; LaTeX-mode but also useful with plain TeX + eplain and with ConTeXt, so: (setq reftex-plug-into-AUCTeX t) (add-hook 'TeX-mode-hook 'reftex-mode) (defun insert-balanced (left right) "Insert a left, right delmiter pair and be poised to type inside them." (interactive) (insert left) (save-excursion (insert right))) ; When start-context-math() is bound to $: ; Typing one $ gets you $$ with the insertion point between them. ; Typing a second $ turns the $$ into ConTeXt's form for displayed math: ; ; \placeformula\startformula ; [blank line with insertion point at beginning] ; \stopformula ; ; Delete the \placeformula if you don't want equations numbered automatically. (defun start-context-math () (interactive) (let* ((start (max (point-min) (- (point) 1))) (stop (min (point-max) (+ (point) 1)))) ; if in the middle of a $$, turn inline math into context display math (if (equal "$$" (buffer-substring-no-properties start stop)) (progn (delete-region start stop) ;get rid of the $$ ; delete preceding spaces, if any (while (and (< (point-min) (point)) (equal (buffer-substring-no-properties (- (point) 1) (point)) " ")) (backward-delete-char 1)) ; delete a preceding newline, if any (if (equal (buffer-substring-no-properties (- (point) 1) (point)) "\n") (backward-delete-char 1)) ; ConTeXt's display math with automatic equation numbering (insert "\n\\placeformula\\startformula\n") (save-excursion (insert "\n\\stopformula"))) ; else: just doing inline math (insert-balanced ?\$ ?\$)))) ; automatically insert right delimiter for $, {, [, and ( and be ; poised to type inside them. (add-hook 'TeX-mode-hook '(lambda () (local-set-key "$" '(lambda () (interactive) (insert-balanced ?\$ ?\$))) (local-set-key "{" '(lambda () (interactive) (insert-balanced ?\{ ?\}))) (local-set-key "[" '(lambda () (interactive) (insert-balanced ?\[ ?\]))) (local-set-key "(" '(lambda () (interactive) (insert-balanced ?\( ?\)))))) ; For ConTeXt mode, inserting two $ signs needs to behave specially (add-hook 'ConTeXt-mode-hook '(lambda () (local-set-key "$" 'start-context-math))) ; The TeX-format-list from AUCTeX's tex.el (v11.82) with a few more ; ConTeXt-specific patterns. I've submitted it to the AUCTeX lists, ; so later versions should have them automatically and you won't need ; this regexp mess in your .emacs ; (setq TeX-format-list '(("JLATEX" japanese-latex-mode "\\\\\\(documentstyle\\|documentclass\\)[^%\n]*{\\(j[s-]?\\|t\\)\\(article\\|report\\|book\\|slides\\)") ("JTEX" japanese-plain-tex-mode "-- string likely in Japanese TeX --") ("AMSTEX" ams-tex-mode "\\\\document\\b") ("CONTEXT" context-mode "\\(\\\\\\(start\\(text\\|project\\|environment\\|product\\|typing\\|component\\|tekst\\)\\)\\|%.*?interface=\\)") ("LATEX" latex-mode "\\\\\\(begin\\|section\\|chapter\\|documentstyle\\|documentclass\\)\\b") ("TEX" plain-tex-mode ".")))
Help with natural tables
These customizations, by Johan Sandblom, make entering natural tables easy.
(defun context-insert-nattab (rows columns) ;; Johan Sandblom 2006-01-28 "Insert a TABLE skeleton" (interactive "nNumber of rows: \nnNumber of columns: \n") (newline) (insert "\\bTABLE\n\\setupTABLE\[\]\n") ;; First a TABLE header (insert "\\bTABLEhead\n\\bTR\\bTH \\eTH\n") (let ((column 1)) (while (< column (- columns 1)) (insert " \\bTH \\eTH\n") (setq column (1+ column)))) (insert " \\bTH \\eTH\\eTR\n\\eTABLEhead\n\\bTABLEbody\n") ;; The rows and columns (let ((row 1)) (while (<= row rows) (insert "\\bTR\\bTD \\eTD\n") ;; The let expression makes sure that each loop starts at the ;; right place (let ((column 1)) (while (< column (- columns 1)) (insert " \\bTD \\eTD\n") (setq column (1+ column))) (insert " \\bTD \\eTD\\eTR\n") (setq row (1+ row)))) (insert "\\eTABLEbody\n\\eTABLE\n"))) (defun context-insert-nattab-row (columns) "Insert a row in a TABLE" (interactive "nNumber of columns: \n") (newline) (insert "\\bTR\\bTD \\eTD\n") (let ((column 1)) (while (< column (- columns 1)) (insert " \\bTD \\eTD\n") (setq column (1+ column))) (insert " \\bTD \\eTD\\eTR\n"))) (defun context-insert-nattab-column (&optional arg) "Insert a column in a TABLE" (interactive "P") (insert "\\bTD \\eTD") (indent-for-tab-command) (newline) (backward-char 5)) (defun context-insert-FLOW-cells (n) ;; Johan Sandblom 2006-01-28 "Insert a FLOWchart cell" (interactive "nNumber of cells: \n") (newline) (let ((x 1)) (while (<= x n) (insert "\\startFLOWcell\n") (insert " \\name {}\n") (insert " \\location {}\n") (insert " \\shape {action}\n") (insert " \\text {}\n") (insert " \\connection[rl]{}\n") (insert "\\stopFLOWcell\n") (setq x (1+ x))))) (add-hook 'ConTeXt-mode-hook '(lambda () (define-key (current-local-map) "\C-cnF" 'context-insert-FLOW-cells) (local-set-key "\C-cnr" 'context-insert-nattab-row) (local-set-key "\C-cnc" 'context-insert-nattab-column) (local-set-key "\C-cnn" 'context-insert-nattab)))
Metapost-mode in context-mode with mmm-mode
(require 'mmm-mode) (setq mmm-global-mode 'maybe) (mmm-add-group 'context-mp '((context-MP :submode metapost-mode :face mmm-code-submode-face :front ".*\\\\start\\w*MP\\w*\\({\\w*}\\|\\[\\w*\\]\\|\\)\\W" :back ".*\\\\stop\\w*MP"))) (add-to-list 'mmm-mode-ext-classes-alist '(context-mode nil context-mp))