Submission of mathtools.el

Please read through to see that I got all the syntax stuff right, and
the style of AUCTeX style-files correct. Please report errors (or
incorrect style) back to me for future reference.

I couldn't get the spreadlines-environment insertion to work like
intended (prompt for dimension). Instead, it asks for position (using
LaTeX-amsmath-env-aligned), but I don't see why (have spent a few hours
trying to locate the cause of this).
-- 
Med Venlig Hilsen / Kind Regards,
Mads Jensen
Rubinsteinsvej 31,st.th
DK-2450 Kbh. SV
Denmark
+45 6168 8518
;;; mathtools.el --- Style hook for the LaTeX package `mathtools'.

;;; author: Mads Jensen <[email protected]>
;;; created: 2011-02-13

;;; Comments: 

;;; This package serves as a wrapper for amsmath, adding more features
;;; and fixing a few bugs in amsmath.  The mathstyle argument for many
;;; of the macros is discussed at
;;; <http://www.tug.org/TUGboat/Articles/tb22-4/tb72perlS.pdf>

;;; Code:

(defvar LaTeX-mathtools-key-val-options
  "Options for the \\mathtoolsset command"
  '(("showonlyrefs")
    ("mathic" ("true" "false"))
    ("showmanualtags" ("true" "false"))
    ("firstline-afterskip")
    ("lastline-preskip")
    ("multlined-pos" ("c" "b" "t"))
    ("multlined-width")
    ("centercolon" ("true" "false"))
    ("prescript-sub-format")
    ("prescript-sup-format")
    ("prescript-arg-format")))

(TeX-add-style-hook 
 "mathtools"
 (function 
  (lambda ()
   
    (TeX-run-style-hooks "amsmath")

    (LaTeX-add-environments 
     '("lgathered" LaTeX-amsmath-env-aligned)
     '("rgathered" LaTeX-amsmath-env-aligned)
     '("multlined" LaTeX-mathtools-env-multlined)
     '("matrix*" LaTeX-mathtools-env-matrix-starred)
     '("pmatrix*" LaTeX-mathtools-env-matrix-starred)
     '("bmatrix*" LaTeX-mathtools-env-matrix-starred)
     '("Bmatrix*" LaTeX-mathtools-env-matrix-starred)
     '("vmatrix*" LaTeX-mathtools-env-matrix-starred)
     '("Vmatrix*" LaTeX-mathtools-env-matrix-starred)
     '("spreadlines" LaTeX-mathtools-env-spreadlines)
     "dcases" "dcases*")
    
    (TeX-add-symbols
     '("mathtoolsset" (TeX-arg-key-val LaTeX-mathtools-key-val))
     '("mathclap" 1)
     '("mathllap" ["Mathstyle"] t)
     '("mathrlap" ["Mathstyle"] t)
     '("mathclap" ["Mathstyle"] t)
     '("mathmakebox" [TeX-arg-size] [ TeX-arg-size ] 1)
     '("clap" 1)
     '("mathmbox" 1)
     '("cramped" 1)
     '("crampedllap" [ "Mathstye" ] t)
     '("crampedrlap" [ "Mathstyle" ] t)
     '("crampedclap" [ "Mathstyle" ] t)
     '("smashoperator" [ "Position (l, r or lr (default)" ] 2)
     ;; 3.1.4 Adjusting the limits of operators
     ;; explicit argument encapsulation does not seem to be required
     '("adjustlimits" 4)
     ;; 3.2 Controlling tags
     '("newtagform" "Name" ["Inner format"] "Left" "Right")
     '("renewtagform" "Name" ["Inner format"] "Left" "Right")
     '("usetagform" "Name")
     '("xleftrightarrow" ["Below"] "Above")
     '("xLeftarrow" ["Below"] "Above")
     '("xRightarrow" ["Below"] "Above")
     '("xLeftrightarrow" ["Below"] "Above")
     '("xhookleftarrow" ["Below"] "Above")
     '("xhookrightarrow" ["Below"] "Above")
     '("xmapsto" ["Below"] "Above")
     '("xrightharpoondown" ["Below"] "Above")
     '("xrightharpoonup" ["Below"] "Above")
     '("xleftharpoondown" ["Below"] "Above")
     '("xleftharpoonup" ["Below"] "Above")
     '("xrightleftharpoons" ["Below"] "Above")
     '("xleftrightharpoons" ["Below"] "Above")
     '("underbracket" [ "Rule thickness" ] [ "Bracket height" ] t)
     '("overbracket" [ "Rule thickness" ] [ "Bracket height" ] t)
     '("underbrace" 1)
     '("overbrace" 1)
     '("LaTeXunderbrace" 1)
     '("LaTeXoverbrace" 1)
     ;; 3.4.2
     '("shoveleft"  [ TeX-arg-size ] 1)
     '("shoveright" [ TeX-arg-size ] 1)
     ;; don't understand t, but intertext in amsmath.el uses it
     '("shortintertext" t)
     '("DeclarePairedDelimeter" TeX-arg-macro "Left delimeter" "Right delimeter")
     ;; 3.4.4
     '("MoveEqLeft" [ "Number" ])
     '("ArrowBetweenLines" [ TeX-arg-macro ] )
     '("ArrowBetweenLines*" [ TeX-arg-macro ] )
     ;; colon operators
     "vcentcolon" "ordinarycolon" "coloneqq" "Coloneqq"
     "coloneq" "Coloneq" "eqqcolon" "Eqqcolon" "eqcolon"
     "Eqcolon" "colonapprox" "Colonapprox" "colonsim" "Colonsim"
     ;; 3.7.1
     "lparen" "rparen"
     ;; left sub/superscripts
     '("prescript" "Below" "Above" t)
     ;; Declaring math sizes; this command doesn't seem so relevant, but
     ;; for completion, it's included
     '("DeclareMathSizes" 4)
     ;; Gathered envionments
     '("newgather" "Name" "Pre-line" "Post-line" "After")
     '("renewgather" "Name" "Pre-line" "Post-line" "After")
     ;; Split fractions
     '("splitfrac" 2)
     '("splitdfrac" 2))
    
    (setq  LaTeX-item-list 
           (append '(("multlined"    . LaTeX-item-equation)
                     ("lgathered" . LaTeX-item-equation)
                     ("rgathered" . LaTeX-item-equation)
                     ("spreadlines" . LaTeX-item-equation)
                     ("matrix*" .  LaTeX-item-equation)
                     ("pmatrix*" .  LaTeX-item-equation)
                     ("bmatrix*" .  LaTeX-item-equation)
                     ("Bmatrix*" .  LaTeX-item-equation)
                     ("vmatrix*" .  LaTeX-item-equation)
                     ("Vmatrix*" .  LaTeX-item-equation)
                     ("dcases"    . LaTeX-item-equation)
                     ("dcases*"    . LaTeX-item-equation))
                   LaTeX-item-list))
    
    (setq LaTeX-label-alist
	  (append '(("lgathered"    . LaTeX-amsmath-label)
		    ("rgathered"   . LaTeX-amsmath-label)
                    ("multlined"    . LaTeX-amsmath-label)
                    LaTeX-label-alist))))))

(defun LaTeX-mathtools-env-matrix-starred (env)
  (let ((where (read-string "(optional) Vertical placement of columns: ")))
    (if (string= where "")
        (setq where "")
      (setq where (concat "[" where "]")))
    (LaTeX-insert-environment env where)))

(defun LaTeX-mathtools-env-spreadlines (env)
  (let ((spread (read-string "Spacing between lines: ")))
    (LaTeX-insert-environment env (concat TeX-grop spread TeX-grcl))
    (newline-and-indent)))

;; FIXME: there are probably more subtle ways to support more than one
;; optional argument; please change if this is the case
(defun LaTeX-mathtools-env-multlined (env)
  (let ((pos (read-string "(optional) Position: "))
        (width (read-string "(optional) Width: "))
        (extra ""))
    (if (not (string= pos ""))
        (setq pos (concat LaTeX-optop pos LaTeX-optcl))
      (setq pos ""))
    (if (not (string= width ""))
        (setq width (concat LaTeX-optop width LaTeX-optcl))
      (setq width ""))
    (setq extra (concat pos width))
    (LaTeX-insert-environment env extra)
    (newline-and-indent)))

;; amsmath options can also be passed directly to mathtools
(defvar LaTeX-mathtools-package-options 
  (append '("fixamsmath" "donotfixamsmathbugs" 
            "allowspaces" "disallowspaces") LaTeX-amsmath-package-options)
  "Package options for the mathtools package.")

;;; mathtools.el ends here.

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
auctex-devel mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/auctex-devel

Reply via email to