Difference between revisions of "AUCTeX"

From Wiki
Jump to navigation Jump to search
(rm synctex which slows down context)
(commented code)
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
 
== With use-package ==
 
== With use-package ==
View a demostration [https://asciinema.org/a/657791 here].
+
View a demostration [https://asciinema.org/a/657842 here].
 
<pre>
 
<pre>
 
;;; Till Mueller, 2024-05-04.  No copyright.
 
;;; Till Mueller, 2024-05-04.  No copyright.
Line 34: Line 34:
 
   (ConTeXt-Mark-version "IV")
 
   (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)
 
   (prettify-symbols-unprettify-at-point nil)
  
   ;; Let AUCTeX detect math environments
+
   ;; Let AUCTeX properly detect formula environment as math mode
 
   (texmathp-tex-commands '(("\\startformula" sw-on) ("\\stopformula" sw-off)))
 
   (texmathp-tex-commands '(("\\startformula" sw-on) ("\\stopformula" sw-off)))
 +
 +
  ;; Set PDF viewer
 
   (TeX-view-program-selection '((output-pdf "Zathura")))
 
   (TeX-view-program-selection '((output-pdf "Zathura")))
 +
 +
  ;; Don't as for permission, just save all files
 
   (TeX-save-query nil)
 
   (TeX-save-query nil)
 +
 +
  ;; Auto-save
 
   (TeX-auto-save t)
 
   (TeX-auto-save t)
 +
 +
  ;; Debug bad boxes and warnings after compilation via
 +
  ;; C-c ` key
 
   (TeX-debug-bad-boxes t)
 
   (TeX-debug-bad-boxes t)
 
   (TeX-debug-warnings t)
 
   (TeX-debug-warnings t)
 +
 +
  ;; Electric inline math,
 
   (TeX-electric-math '("$" . "$"))
 
   (TeX-electric-math '("$" . "$"))
 +
 +
  ;; Electric sub and superscript, inserts {} after ^ and _
 +
  ;; such as a^{}.
 
   (TeX-electric-sub-and-superscript t)
 
   (TeX-electric-sub-and-superscript t)
 +
 +
  ;; RefTex
 
   (reftex-plug-into-AUCTeX t)
 
   (reftex-plug-into-AUCTeX t)
 +
 +
  ;; Customize keyboard shortcuts for TeX math macros
 
   (LaTeX-math-list
 
   (LaTeX-math-list
 
   '(("o r" "mathbb{R}" nil nil)
 
   '(("o r" "mathbb{R}" nil nil)
Line 53: Line 75:
 
     (?= "coloneq" nil nil)
 
     (?= "coloneq" nil nil)
 
     ("o c" "mathbb{C}" nil nil)))
 
     ("o c" "mathbb{C}" nil nil)))
 +
 
   :bind
 
   :bind
   (:map TeX-mode-map
+
   ;; Electric \left(\right) \left[\right] \left\{\right\}
        ("<f8>" . TeX-command-run-all))
+
   ;; only left brace; there is no right electric brace function
   ;; only left brace; there is no right electric brace
 
 
   (:map ConTeXt-mode-map ("(" . LaTeX-insert-left-brace))
 
   (:map ConTeXt-mode-map ("(" . LaTeX-insert-left-brace))
 
   (:map ConTeXt-mode-map ("[" . LaTeX-insert-left-brace))
 
   (: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
 
   :config
 
   (add-hook 'TeX-after-compilation-finished-functions
 
   (add-hook 'TeX-after-compilation-finished-functions
 
             #'TeX-revert-document-buffer)
 
             #'TeX-revert-document-buffer)
 +
 +
  ;; Prettify symbols mode, customizable.
 
   (with-eval-after-load "tex-mode"
 
   (with-eval-after-load "tex-mode"
 
     (dolist (symb
 
     (dolist (symb

Latest revision as of 08:23, 5 May 2024

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))