AUCTeX
Jump to navigation
Jump to search
Contents
With use-package
View a demostration here.
;;; Till Mueller, 2024-05-04. No copyright. ;; AUCTeX has good support for LaTeX out-of-the-box. For ConTeXt, not ;; so much. ;; ;; Fortunately much of the functionality, in particular ;; LaTeX-math-mode can be reused as-is in ConTeXt mode. ;; LaTeX-math-mode is a minor mode with easy access to TeX math ;; macros. Such as ` a for \alpha. You can define custom shortcuts ;; via LaTeX-math-list as well. ;; ;; The key is to tweak texmathp-tex-commands for recognizing math ;; environment in a ConTeXt document, or else LaTeX-math will not ;; work. (use-package context :hook ((ConTeXt-mode . turn-on-reftex) ;; personal preference (ConTeXt-mode . variable-pitch-mode) ;; show \alpha as α and \mathbb{R} as ℝ (ConTeXt-mode . prettify-symbols-mode) ;; shortcuts for symbols (ConTeXt-mode . LaTeX-math-mode)) :custom ;; AUCTeX defaults to mkii; change to iv for iv and lmtx (ConTeXt-Mark-version "IV") ;; Enable electric left right brace (LaTeX-electric-left-right-brace t) ;; Do not unprettify symbol at point (prettify-symbols-unprettify-at-point nil) ;; Let AUCTeX properly detect formula environment as math mode (texmathp-tex-commands '(("\\startformula" sw-on) ("\\stopformula" sw-off))) ;; Set PDF viewer (TeX-view-program-selection '((output-pdf "Zathura"))) ;; Don't as for permission, just save all files (TeX-save-query nil) ;; Auto-save (TeX-auto-save t) ;; Debug bad boxes and warnings after compilation via ;; C-c ` key (TeX-debug-bad-boxes t) (TeX-debug-warnings t) ;; Electric inline math, (TeX-electric-math '("$" . "$")) ;; Electric sub and superscript, inserts {} after ^ and _ ;; such as a^{}. (TeX-electric-sub-and-superscript t) ;; RefTex (reftex-plug-into-AUCTeX t) ;; Customize keyboard shortcuts for TeX math macros (LaTeX-math-list '(("o r" "mathbb{R}" nil nil) ("o Q" "qquad" nil nil) ("o q" "quad" nil nil) ("o n" "mathbb{N}" nil nil) (?= "coloneq" nil nil) ("o c" "mathbb{C}" nil nil))) :bind ;; Electric \left(\right) \left[\right] \left\{\right\} ;; only left brace; there is no right electric brace function (:map ConTeXt-mode-map ("(" . LaTeX-insert-left-brace)) (:map ConTeXt-mode-map ("[" . LaTeX-insert-left-brace)) (:map ConTeXt-mode-map ("{" . LaTeX-insert-left-brace)) :config (add-hook 'TeX-after-compilation-finished-functions #'TeX-revert-document-buffer) ;; Prettify symbols mode, customizable. (with-eval-after-load "tex-mode" (dolist (symb '(("\\colon" . ?:) ("\\mathbb{C}" . ?ℂ) ("\\mathbb{K}" . ?𝕂))) (add-to-list 'tex--prettify-symbols-alist symb))))
Help with delimiters 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)) (add-hook 'ConTeXt-mode-hook '(lambda () (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)))
Help with FLOW charts (from m-chart.tex)
;; Johan Sandblom. No copyright. (defun context-FLOW-shift-cells (x y beg end) "Shifts FLOW cells in region right and down" (interactive "nRight: \nnDown: \nr") (save-excursion (goto-char beg) (while (search-forward-regexp "{\\([0-9]+\\),\\([0-9]+\\)}" end t) (replace-match (concat "{" (number-to-string (+ (string-to-number (match-string 1)) x)) "," (number-to-string (+ (string-to-number (match-string 2)) y)) "}") nil nil)))) (defun context-FLOW-insert-cells (%optional n) "Insert a FLOWchart cell" (interactive "P") (if (not (bolp)) (newline)) (let ((x 1)) (while (<= x (if n n 1)) (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-FLOW-insert-cells) (define-key (current-local-map) "\C-cnS" 'context-FLOW-shift-cells)))
Metapost-mode and r-mode (from ESS, http://ess.r-project.org) in context-mode with mmm-mode
;; Johan Sandblom. No copyright. (require 'mmm-mode) (setq mmm-global-mode 'maybe) (setq mmm-submode-decoration-level 2) (mmm-add-group 'context-plus '((context-R :submode r-mode :face mmm-comment-submode-face :front ".*\\\\startR\\w*\\({\\w*}\\|\\[\\w*\\]\\|\\)\\W*" :back ".*\\\\stopR") (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-plus))