Hi, I brushed up my tex-symb.el, that is posted here two years ago. I attached new tex-symb.el at the end of this mail.
tex-symb provieds two abbrev expand commands. 1. Greek expansion (TeX-symb-greek-expand) a C-. -> \alpha 2. Symbol expansion (TeX-symb-symbol-expand) oo C-, -> \infty ^ C-, -> \textasciicircum (tex-symb.el expands not only math symbols but also TeX commands used in text mode like \textasciicircum) tex-symb expands TeX commands, too. For example, you type `...' and expand it by `C-,' ... C-, -> \dots Then you got `\dots'. You can expand (convert) `\dots' to `\therefore' by hitting `C-,' again. \dots C-, -> \therefore Once again type C-, to get `\because'. \therefore C-, -> \because I prepared abbrev rules for almost LaTeX math symbols (including amssymb!). I would like to add tex-symb.el into AUCTeX distribution for the third Math symbol aid tool (The first and second tools are Menu and LaTeX-math-mode). Developers, how do you think? --- email: [EMAIL PROTECTED] Name:: Masayuki Ataka // (Japan)
;;; tex-symb.el --- TeX symbol expansion ;; Copyright (C) 2005, 2007 Free Software Foundation. ;; Author: Masayuki Ataka <[EMAIL PROTECTED]> ;; Maintainer: [email protected] ;; Created: 2005-03-02 ;; Keywords: tex, wp ;; This file is part of AUCTeX. ;; AUCTeX 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 2, or (at your option) ;; any later version. ;; AUCTeX 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 AUCTeX; see the file COPYING. If not, write to the Free ;; Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA ;; 02110-1301, USA. ;;; Commentary: ;; This file provides post-fix type abbrev expansion of greek and symbols like ;; X-Symbol package <http://x-symbol.sourceforge.net/>. ;; ;; Greek letters are expanded by C-. ;; a C-. -> \alpha ;; ;; Symbols are expanded by C-, ;; oo C-, -> \infty ;; ;;; Code: (require 'tex) (require 'texmathp) (defgroup TeX-symb nil "TeX symbol abbrev expansion." :group 'AUCTeX) ;; ;; Greeks ;; (defconst TeX-symb-greek-alist "Alist of LaTeX greek letters." '(("a" . "\\alpha") ("b" . "\\beta") ("c" . "\\chi") ("d" . "\\delta") ("e" . "\\epsilon") ("f" . "\\phi") ("g" . "\\gamma") ("h" . "\\eta") ("i" . "\\iota") ("k" . "\\kappa") ("l" . "\\lambda") ("m" . "\\mu") ("n" . "\\nu") ("p" . "\\pi") ("q" . "\\theta") ("r" . "\\rho") ("s" . "\\sigma") ("t" . "\\tau") ("u" . "\\upsilon") ("w" . "\\omega") ("x" . "\\xi") ("y" . "\\psi") ("z" . "\\zeta") ("D" . "\\Delta") ("F" . "\\Phi") ("G" . "\\Gamma") ("L" . "\\Lambda") ("P" . "\\Pi") ("Q" . "\\Theta") ("S" . "\\Sigma") ("U" . "\\Upsilon") ("W" . "\\Omega") ("X" . "\\Xi") ("Y" . "\\Psi") ; ("ch" . "\\chi") ("kh" . "\\chi") ("ks" . "\\xi") ("ph" . "\\phi") ("ps" . "\\psi") ("th" . "\\theta") ("Ch" . "\\chi") ("Kh" . "\\chi") ("Ks" . "\\xi") ("Ph" . "\\Phi") ("Ps" . "\\Psi") ("Th" . "\\Theta") )) (defconst TeX-symb-vargreek-alist "Alist of LaTeX variant greek letters." '(("ve" . "\\varepsilon") ("vf" . "\\varphi") ("vp" . "\\varpi") ("vr" . "\\varrho") ("vs" . "\\varsigma") ("vq" . "\\vartheta") ; ("vph" . "\\varphi") ("vth" . "\\vartheta") )) (defconst TeX-symb-vargreek-amssymb-alist "Alist of variant greek letters defined in amssymb package." '(("vk" . "\\varkappa") ("vD" . "\\varDelta") ("vF" . "\\varPhi") ("vG" . "\\varGamma") ("vL" . "\\varLambda") ("vP" . "\\varPi") ("vQ" . "\\varTheta") ("vS" . "\\varSigma") ("vU" . "\\varUpsilon") ("vW" . "\\varOmega") ("vX" . "\\varXi") ("vY" . "\\varPsi") ; ("vPh" . "\\varPhi") ("vTh" . "\\varTheta") ("vPs" . "\\varPsi") )) ;; ;; Symbols ;; (defconst TeX-symb-text-alist "Alist of LaTeX symbols used in text mode." '(;; Text ("C" . "\\copyright") ("R" . "\\textregistered") ("TM" . "\\texttrademark") ("*" . "\\textbullet") ("." . "\\textperiodcentered") ("_" . "\\textvisiblespace") ("~" . "\\textasciitilde") ("^" . "\\textasciicircum") ("\\" . "\\textbackslash") ("|" . "\\textbar") ("<" . "\\textless") (">" . "\\textgreater") ("#" . "\\pounds") ("..." . "\\ldots") )) (defconst TeX-symb-math-alist "Alist of LaTeX symbols used in math mode." '(("\\" . "\\backslash") ("<" . "\\langle") (">" . "\\rangle") ;; Binary Operator ("+_" . "\\pm") ("-+" . "\\mp") ("x" . "\\times") ("/" . "\\div") ("*" . "\\ast") ("\\ast" . "\\star") ("o" . "\\circ") ("\\circ" . "\\bullet") ("." . "\\cdot") ("u" . "\\cup") ("\\cup" . "\\cap") ("u+" . "\\uplus") ("\\cap" . "\\sqcup") ("\\sqcup" . "\\sqcap") ("v" . "\\vee") ("^" . "\\wedge") ("\\backslash" . "\\setminus") ("|>" . "\\triangleright") ("<|" . "\\triangleleft") ("o+" . "\\oplus") ("o-" . "\\ominus") ("ox" . "\\otimes") ("o/" . "\\oslash") ("o." . "\\odot") ("O" . "\\bigcirc") ("t" . "\\dagger") ("tt" . "\\ddagger") ("\\prod" . "\\amalg") ;; Relation Operator ; with direction ("<_" . "\\leq") (">_" . "\\geq") ("<<" . "\\ll") (">>" . "\\gg") ("(" . "\\subset") (")" . "\\supset") ("(_" . "\\subseteq") (")_" . "\\supseteq") ("[_" . "\\sqsubseteq") ("]_" . "\\sqsupseteq") ("|-" . "\\vdash") ("-|" . "\\dashv") ("(-" . "\\in") ("-)" . "\\ni") ("/(-" . "\\notin") ; no direction ("=_" . "\\equiv") ("~" . "\\sim") ("~_" . "\\simeq") ("~~" . "\\approx") ("~=" . "\\cong") ("/=" . "\\neq") (".=" . "\\doteq") ("oc" . "\\propto") ("|=" . "\\models") ("|_" . "\\perp") ("|" . "\\mid") ("||" . "\\parallel") ("|x|" . "\\bowtie") ("\\subset" . "\\smile") ("\\supset" . "\\frown") ;; Arrow ; horizontal ("<-" . "\\leftarrow") ("<=" . "\\Leftarrow") ("<--" . "\\longleftarrow") ("<==" . "\\Longleftarrow") ("->" . "\\rightarrow") ("=>" . "\\Rightarrow") ("-->" . "\\longrightarrow") ("==>" . "\\Longrightarrow") ("<->" . "\\leftrightarrow") ("<=>" . "\\Leftrightarrow") ("<-->" . "\\longleftrightarrow") ("<==>" . "\\Longleftrightarrow") ("\\Longleftrightarrow" . "\\iff") ; vertical ("^|" . "\\uparrow") ("^||" . "\\Uparrow") ("|v" . "\\downarrow") ("||v" . "\\Downarrow") ("^|v" . "\\updownarrow") ("^||v" . "\\Updownarrow") ; misc ("|->" . "\\mapsto") ("|-->" . "\\longmapsto") ;; Misc symbol ("N" . "\\aleph") ("h" . "\\hbar") ("i" . "\\imath") ("j" . "\\jmath") ("l" . "\\ll") ("p" . "\\wp") ("R" . "\\Re") ("I" . "\\Im") ("\\delta" . "\\partial") ("oo" . "\\infty") ("'" . "\\prime") ("0" . "\\emptyset") ("\\Delta" . "\\nabla") ("T" . "\\top") ("perp" . "\\bot") ("/_" . "\\angle") ("A" . "\\forall") ("E" . "\\exists") ("b" . "\\flat") ("#" . "\\sharp") ;; Big Opetator ("\\Sigma" . "\\sum") ("\\Pi" . "\\prod") ("\\amalg" . "\\coprod") ("U" . "\\bigcup") ("U+" . "\\biguplus") ("\\bigcup" . "\\bigcap") ("V" . "\\bigvee") ("\\wedge" . "\\bigwedge") ("O." . "\\bigodot") ("Ox" . "\\bigotimes") ("O+" . "\\bigoplus") )) (defconst TeX-symb-math-amssymb-alist "Alist of math symbols defined in amssymb package." '(("..." . "\\dots") ;; Binary Operator ("[.]" . "\\boxdot") ("[+]" . "\\boxplus") ("[x]" . "\\boxtimes") ("[-]" . "\\boxminus") ("\\dot" . "\\centerdot") ("v_" . "\\veebar") ("_^" . "\\barwedge") ("=^" . "\\doublebarwedge") ("Uu" . "\\Cup") ("\\Cup" . "\\Cap") ("\\wedge" . "\\curlywedge") ("\\vee" . "\\curlyvee") ("\\times" . "\\leftthreetimes") ("\\leftthreetimes" . "\\rightthreetimes") (".+" . "\\dotplus") ("\\top" . "\\intercal") ("Oo" . "\\circledcirc") ("O*" . "\\circledast") ("O-" . "\\circleddash") ("/x" . "\\divideontimes") ("<." . "\\lessdot") (">." . "\\gtrdot") ("|x" . "\\ltimes") ("x|" . "\\rtimes") ;; Relation 1 ("->>" . "\\twoheadrightarrow") ("<<-" . "\\twoheadleftarrow") ("\\leftarrow" . "\\leftleftarrows") ("\\rightarrow" . "\\rightrightarrows") ("\\leftrightarrow" . "\\leftrightarrows") ("\\leftrightarrows" . "\\rightleftarrows") ("o=" . "\\circeq") (">~" . "\\gtrsim") (">~~" . "\\gtrapprox") ("-o" . "\\multimap") ("\\dots" . "\\therefore") ("\\therefore" . "\\because") (".=." . "\\doteqdot") ("<~" . "\\lesssim") ("<~~" . "\\lessapprox") ("/<" . "\\eqslantless") ("\\<" . "\\eqslantgtr") ;; Relation 2 ("<__" . "\\leqq") ("<\\" . "\\leqslant") ("<>" . "\\lessgtr") ("\\doteqdot" . "\\risingdotseq") ("\\risingdotseq" . "\\fallingdotseq") (">__" . "\\geqq") (">/" . "\\geqslant") ("><" . "\\gtrless") ("[" . "\\sqsubset") ("]" . "\\sqsupset") ("\\triangleright" . "\\vartriangleright") ("\\triangleleft" . "\\vartriangleleft") ("|>_" . "\\trianglerighteq") ("<|_" . "\\trianglelefteq") (")(" . "\\between") ("\\vartriangleright" . "\\blacktriangleright") ("\\vartriangleleft" . "\\blacktriangleleft") ("=o" . "\\eqcirc") ("<_>" . "\\lesseqgtr") (">_<" . "\\gtreqless") ("<__>" . "\\lesseqqgtr") (">__<" . "\\gtreqqless") ("\\Rightarrow" . "\\Rrightarrow") ("\\Leftarrow" . "\\Lleftarrow") ("\\propto" . "\\varpropto") ("\\smile" . "\\smallsmile") ("\\frown" . "\\smallfrown") ("((" . "\\Subset") ("))" . "\\Supset") ("(__" . "\\subseteqq") (")__" . "\\supseteqq") ("<<<" . "\\lll") (">>>" . "\\ggg") ("\\sim" . "\\backsim") ("\\simeq" . "\\backsimeq") ;; Relation 3 ("\\mid" . "\\shortmid") ("\\parallel" . "\\shortparallel") ("\\backsim" . "\\thicksim") ("\\approx" . "\\thickapprox") ("~~_" . "\\approxeq") ("\\epsilon" . "\\backepsilon") ;; Misc ("[]" . "\\square") ("\\square" . "\\blacksquare") ("`" . "\\backprime") ("\\star" . "\\bigstar") ("\\angle" . "\\measuredangle") ("\\measuredangle" . "\\sphericalangle") ("Os" . "\\circledS") ("C" . "\\complement") ("/" . "\\diagup") ("\\setminus" . "\\diagdown") ("\\emptyset" . "\\vernothing") ("/E" . "\\nexsists") ("F" . "\\Finv") ("G" . "\\Game") ("\\Omega" . "\\mho") ("\\partial" . "\\eth") ("kk" . "\\Bbbk") ("h/" . "\\hslash") )) ;; ;; TeX-symb-make-expand-defun ;; (defun TeX-symb-make-expand-defun (name) "Return a function definition for expanding abbrevs. The generated function `TeX-symb-NAME-expand' expand an abbrev using the rule `TeX-symb-NAME-alist'. `TeX-symb-NAME-alist' should be an alist or a function that returns an alist. Alist should be (ABBREV . EXPANDED-TEXT)." (let ((alist (intern (concat "TeX-symb-" name "-alist")))) (eval `(defun ,(intern (concat "TeX-symb-" name "-expand")) () "Generated by `TeX-symb-make-expand-defun'." (interactive) (let ((pos (point)) result token (list (TeX-symb-reverse-string-list (cond ((listp ,alist) ,alist) ((functionp ,alist) (funcall ,alist)) (t (error "%s should be alist or function" ,alist)))))) (while (setq result (TeX-symb-ref-string (char-before pos) list)) (setq list result pos (1- pos))) (setq token (TeX-symb-first-string list)) (when token (delete-backward-char (- (point) pos)) (insert token) (TeX-symb-auto-fold))))))) (defsubst TeX-symb-first-string (alist) "Return a list of cars of ALIST." (car (delete nil (mapcar (lambda (x) (and (stringp (car x)) (car x))) alist)))) (defsubst TeX-symb-ref-string (ch alist) "Return a list of cdrs of ALIST which car is equal to CH." (delete nil (mapcar (lambda (elt) (and (equal ch (car elt)) (cdr elt))) alist))) (defsubst TeX-symb-reverse-string-list (alist) "Return a list of (CAR-CONVERTED-TO-CHARS-IN-REVERSE-ORDER CDR)." (mapcar (lambda (x) `(,@(nreverse (string-to-list (car x))) ,(cdr x))) alist)) ;; ;; TeX-symb-greek-expand ;; (defcustom TeX-symb-greek-alist #'TeX-symb-greek-alist "*Alist or a function that returns alist, which value should be (ABBREV . TEX-COMMAND). This alist is used by a function `TeX-symb-greek-expand'." :group 'TeX-symb :type '(choice (function) (alist))) (TeX-symb-make-expand-defun "greek") (define-key TeX-mode-map [(control ?\.)] 'TeX-symb-greek-expand) (defun TeX-symb-greek-alist () "Return an alist of TeX greek letters." (if (fboundp 'TeX-symb-greek-user-alist) (TeX-symb-greek-user-alist) (cond (t (append (and (assoc "amssymb" TeX-style-hook-list) TeX-symb-vargreek-amssymb-alist) TeX-symb-greek-alist TeX-symb-vargreek-alist))))) ;; ;; TeX-symb-string-expand ;; (defcustom TeX-symb-symbol-alist #'TeX-symb-symbol-alist "*Alist or a function that returns alist, which value should be (ABBREV . TEX-COMMAND). This alist is used by a function `TeX-symb-symbol-expand'." :group 'TeX-symb :type '(choice (function) (alist))) (TeX-symb-make-expand-defun "symbol") (define-key TeX-mode-map [(control ?\,)] 'TeX-symb-symbol-expand) (defun TeX-symb-symbol-alist () "Return an alist of TeX symbols." (if (fboundp 'TeX-symb-symbol-user-alist) (TeX-symb-symbol-user-alist) (cond (t (if (texmathp) (append (and (assoc "amssymb" TeX-style-hook-list) TeX-symb-math-amssymb-alist) TeX-symb-math-alist) TeX-symb-text-alist))))) ;; ;; misc ;; (defcustom TeX-symb-auto-fold t "*If non-nil, fold macros just after command `TeX-symb-*-expand'." :group 'TeX-fold :type 'boolean) (defun TeX-symb-auto-fold () (when (and TeX-symb-auto-fold (featurep 'tex-fold) TeX-fold-mode) (let* ((it-start (save-excursion (backward-char) (TeX-find-macro-start))) (it (when it-start (save-excursion (goto-char it-start) (looking-at (concat (regexp-quote TeX-esc) "\\([EMAIL PROTECTED])")) (if (fboundp 'match-string-no-properties) (match-string-no-properties 1) (match-string 1)))))) (when (delete nil (mapcar (lambda (fold-list) (member it (cadr fold-list))) TeX-fold-math-spec-list)) (save-excursion (backward-char 1) (TeX-fold-math)))))) (provide 'tex-symb) ;;; tex-symb.el ends here
_______________________________________________ auctex-devel mailing list [email protected] http://lists.gnu.org/mailman/listinfo/auctex-devel
