auctex-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 54c82bd0: New style file physics.el


From: Ikumi Keita
Subject: master 54c82bd0: New style file physics.el
Date: Tue, 20 Dec 2022 07:28:45 -0500 (EST)

branch: master
commit 54c82bd093aec4b1fa9264ac91b70cf30da737b6
Author: Ikumi Keita <ikumi@ikumi.que.jp>
Commit: Ikumi Keita <ikumi@ikumi.que.jp>

    New style file physics.el
    
    * style/physics.el: New style file.
    * Makefile.in (STYLESRC): Add it.
---
 Makefile.in      |   3 +-
 style/physics.el | 418 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 420 insertions(+), 1 deletion(-)

diff --git a/Makefile.in b/Makefile.in
index a2bb2d9d..f64125c7 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -195,7 +195,8 @@ STYLESRC = style/prosper.el \
           style/ifxetex.el   style/multibib.el  style/ltcaption.el \
           style/keyval.el    style/kvoptions.el style/kvsetkeys.el \
           style/proc.el      style/microtype.el style/tcolorboxlib-theorems.el 
\
-          style/amsaddr.el   style/parskip.el   style/catchfilebetweentags.el
+          style/amsaddr.el   style/parskip.el   style/catchfilebetweentags.el \
+          style/physics.el
 
 STYLEELC = $(STYLESRC:.el=.elc)
 
diff --git a/style/physics.el b/style/physics.el
new file mode 100644
index 00000000..8676a696
--- /dev/null
+++ b/style/physics.el
@@ -0,0 +1,418 @@
+;;; physics.el --- AUCTeX style for `physics' (v1.3).  -*- lexical-binding: t; 
-*-
+
+;; Copyright (C) 2022 Free Software Foundation, Inc.
+
+;; Author: Ikumi Keita <ikumikeita@jcom.home.ne.jp>
+;; Maintainer: auctex-devel@gnu.org
+;; Created: 2022-12-xx
+;; Keywords: tex
+
+;; 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 3, 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 adds support for `physics.sty' (v1.3) from 2012/12/12
+;; `physics.sty' is part of TeX Live.
+
+;;; Code:
+
+(require 'tex)
+
+;; List of supported braces by macros in physics package
+;;     | () | [] | || | {} |null| big
+;; ----+----+----+----+----+--- +----
+;; qty | +  | +  | +  | +  | !  | +
+;; abs | !  | !  | !  | @  | !  | +
+;; eval| *  | *  | !  | -  | !  | !
+;; grad| +  | +  |    | @  | =  | !
+;; sin | +  | ^  |    | @  | =  | !
+;; exp | +  | +  |    | +  |    | !
+;; tr  | +  | +  |    | +  |    | !
+;; erf |    |    |    | @  | =  | !
+;; Res | +  | +  |    | +  |    | !
+;; pv  |    |    |    | @  | =  | !
+;; Re  |    |    |    | +  |    | !
+;; dd  | +  | ^  |    | @  |    | !
+;; bra |    |    |    | +  | =  | !
+;; mqty| +  | +  | +  | @  | !  | !
+;;mqty*| +  |    |    | @  | !  | !
+;;
+;; + ... supported
+;; ! ... error or wrong result
+;; @ ... works, but missing "{}" in the output
+;; * ... supported, but the right brace must be "|"
+;; - ... works, with only right "|" in the output
+;; = ... same as {}
+;; ^ ... interpreted as power optional argument
+;;
+;; Special note
+;;  + \sin[2]x and \sin[2]{x} aren't supported.
+;;  + "\dd{x}" and "\dd x" give different output.
+;;  + mqty* is only meaningful when followed by "(...)".
+;;  + as opposed to the document, \tr and \trace aren't equivalent.
+;;  + dv accepts one or two arguments except optional argument.
+;;    o 1 arg      ... {derivative variable}
+;;    o 2 arg      ... {function to derive}{derivative variable}
+;;    O 1 arg + () ... {derivative variable}(function to derive)
+;;  + pdv accepts one, two or three arguments except optional argument.
+;;    o 1 arg      ... {derivative variable}
+;;    o 2 args     ... {function to derive}{derivative variable}
+;;    o 3 args     ... {func. to der.}{der. var.1}{der. var.2}
+;;    o 1 arg + () ... {derivative variable}(function to derive)
+;;    - 2 args + ()... NA
+;;    - 3 args + ()... NA
+
+(defun TeX-arg-physics-big (_optional)
+  "Prompt for various \\big specification and insert it without braces.
+\\Big, \\bigg and \\Bigg are also allowed."
+  (TeX-arg-completing-read t '("big" "Big" "bigg" "Bigg")
+                           "bigness specification: " t TeX-esc "" "" nil t))
+
+(defun TeX-physics--arg-any-braces (paren bracket vert brace
+                                          &optional default close)
+  "Template to query and insert various braces.
+Boolean arguments PAREN, BRACKET, VERT and BRACE mean to support (...),
+[...], |...| and {...}, respectively.
+Optional argument DEFAULT specifies default open brace.
+Non-nil CLOSE specifies close brace unconditionally."
+  (let* ((candidates
+          (let (lst)
+            (if paren   (push '("(" . ")") lst))
+            (if bracket (push (cons LaTeX-optop LaTeX-optcl) lst))
+            (if vert    (push '("|" . "|") lst))
+            (if brace   (push (cons TeX-grop TeX-grcl) lst))
+            lst))
+         (open (completing-read
+                (concat "Which brace?"
+                        (cond
+                         (default
+                           (format " (default \"%s\")" default))
+                         (brace
+                          " (RET to omit)")
+                         (t
+                          ""))
+                        ": ")
+                candidates nil t nil nil default)))
+    (or close
+        (setq close (cdr (assoc open candidates))))
+    ;; When `default' is nil and the user gave empty answer,
+    ;;  - If `brace' is nil, use "{}".
+    ;;  - Otherwise do nothing.
+    (if (and (= 0 (length open))
+             (not brace))
+        (setq open TeX-grop
+              close TeX-grcl))
+    (when (< 0 (length open))
+      (setq TeX-arg-opening-brace open
+            TeX-arg-closing-brace close)
+      (let ((content
+             (if (TeX-active-mark)
+                 (prog1
+                     (buffer-substring-no-properties (point) (mark))
+                   (delete-region (point) (mark)))
+               "")))
+        (TeX-argument-insert content nil)))))
+
+(defun TeX-arg-physics-qty (_optional)
+  "Query and insert (), [], || or {}.
+Default ()."
+  (TeX-physics--arg-any-braces t t t t "("))
+
+(defun TeX-arg-physics-eval (_optional)
+  "Query and insert (| or [|.
+When the user declined, supplement {} instead."
+  (TeX-physics--arg-any-braces t t nil nil nil "|"))
+
+(defun TeX-arg-physics-grad (_optional)
+  "Query and insert () or [].
+When the user declined, supplement {} instead."
+  (TeX-physics--arg-any-braces t t nil nil))
+
+(defun TeX-arg-physics-exp (_optional)
+  "Query and insert (), [] or {}."
+  (TeX-physics--arg-any-braces t t nil t))
+
+(defun TeX-arg-physics-dd (_optional)
+  "Query and insert () or {}."
+  (TeX-physics--arg-any-braces t nil nil t))
+
+(defun TeX-arg-physics-mqty (_optional)
+  "Query and insert (), [] or ||.
+When the user declined, supplement {} instead."
+  (TeX-physics--arg-any-braces t t t nil))
+
+(defun TeX-physics--arg-single-brace (open close &optional force)
+  "Template to query and insert single flavor of braces.
+If optional argument FORCE is non-nil, don't ask and always insert."
+  (when (or force
+            (y-or-n-p (format "Use \"%s%s\"? " open close)))
+    (setq TeX-arg-opening-brace open
+          TeX-arg-closing-brace close)
+    (let ((content (if (TeX-active-mark)
+                       (prog1
+                           (buffer-substring-no-properties (point) (mark))
+                         (delete-region (point) (mark)))
+                     "")))
+      (TeX-argument-insert content nil))))
+
+(defun TeX-arg-physics-trig (_optional)
+  "Query and insert ().
+First query optional argument for power.  If that is non-empty,
+use () unconditionally."
+  ;; XXX: Should we respect `TeX-insert-macro-default-style'?
+  (let ((power (TeX-read-string "(Optional) Power: ")))
+    (let ((TeX-arg-opening-brace LaTeX-optop)
+          (TeX-arg-closing-brace LaTeX-optcl))
+      (TeX-argument-insert power t))
+    (TeX-physics--arg-single-brace "(" ")" (< 0 (length power)))))
+
+(defun TeX-arg-physics-ReIm (_optional)
+  "Query and insert {}."
+  (TeX-physics--arg-single-brace TeX-grop TeX-grcl))
+
+(defun TeX-arg-physics-mqty* (_optional)
+  "Insert ()."
+  (TeX-physics--arg-single-brace "(" ")" t))
+
+(defun TeX-physics--arg-1-or-2-arg (prompt1 prompt2)
+  "Template to query and insert one or two arguments."
+  (let* ((arg1 (TeX-read-string (concat prompt1 ": ")))
+         (arg2 (TeX-read-string (concat prompt2 " (RET to omit): "))))
+    (TeX-argument-insert arg1 nil)
+    (if (< 0 (length arg2))
+        (TeX-argument-insert arg2 nil))))
+
+(defun TeX-arg-physics-braket (_optional)
+  (TeX-physics--arg-1-or-2-arg "Bra content" "Ket content"))
+
+(defun TeX-arg-physics-ketbra (_optional)
+  (TeX-physics--arg-1-or-2-arg "Ket content" "Bra content"))
+
+(defun TeX-arg-physics-expval (_optional)
+  (TeX-physics--arg-1-or-2-arg "Observable" "State"))
+
+(defun TeX-arg-physics-derivative (_optional &optional partial)
+  "Query and insert one or two arguments for derivative.
+The user can choose whether to wrap the function to derive with ().
+In addition, query and insert optional power argument.
+
+If optional argument PARTIAL is non-nil, three arguments are also
+supported for partial derivative.
+When three arguments are specified, don't ask optional power argument."
+  (let* ((func (TeX-read-string
+                "\
+Function to derive (RET to omit, SPC RET to have empty placeholder): "))
+         (paren (and (< 0 (length func))
+                     (y-or-n-p "Use \"()\" to wrap the function? ")))
+         (var1 (TeX-read-string "Derivative variable: "))
+         (var2 (and partial (not paren) (< 0 (length func))
+                    (TeX-read-string
+                     "Derivative variable 2nd (RET to omit): "))))
+    (unless var2
+      ;; XXX: Should we respect `TeX-insert-macro-default-style'?
+      (TeX-arg-string t "Power" nil nil nil LaTeX-optop LaTeX-optcl))
+    (when (and (< 0 (length func))
+               (not paren))
+      (if (equal func " ")
+          (setq func ""))
+      (TeX-argument-insert func nil))
+    (TeX-argument-insert var1 nil)
+    (if (< 0 (length var2))
+        (TeX-argument-insert var2 nil))
+    (when paren
+        (setq TeX-arg-opening-brace "("
+              TeX-arg-closing-brace ")")
+        (if (equal func " ")
+            (setq func ""))
+        (TeX-argument-insert func nil))))
+
+(TeX-add-style-hook
+ "physics"
+ (lambda ()
+   ;; physics requires amsmath and xparse.
+   (TeX-run-style-hooks "amsmath" "xparse")
+
+   (TeX-add-symbols
+    ;; 2.1 Automatic bracing
+    '("quantity" [TeX-arg-physics-big] TeX-arg-physics-qty)
+    '("qty" [TeX-arg-physics-big] TeX-arg-physics-qty)
+    '("pqty" [TeX-arg-physics-big] t) '("bqty" [TeX-arg-physics-big] t)
+    '("vqtry" [TeX-arg-physics-big] t) '("Bqty" [TeX-arg-physics-big] t)
+    '("absolutevalue" [TeX-arg-physics-big] t)
+    '("absolutevalue*" t)
+    '("abs" [TeX-arg-physics-big] t) '("abs*" t)
+    '("norm" [TeX-arg-physics-big] t)
+    '("norm*" t)
+    '("evaluated" TeX-arg-physics-eval)
+    '("evaluated*" TeX-arg-physics-eval)
+    '("eval" TeX-arg-physics-eval) '("eval*" TeX-arg-physics-eval)
+    '("order" [TeX-arg-physics-big] t)
+    '("order*" t)
+    '("commutator" [TeX-arg-physics-big] 2)
+    '("commutator*" 2)
+    '("comm" [TeX-arg-physics-big] 2) '("comm*" 2)
+    '("anticommutator" [TeX-arg-physics-big] 2)
+    '("anticommutator*" 2)
+    '("acomm" [TeX-arg-physics-big] 2) '("acomm*" 2)
+    '("poissonbracket" [TeX-arg-physics-big] 2)
+    '("poissonbracket*" 2)
+    '("pb" [TeX-arg-physics-big] 2) '("pb*" 2)
+    ;; 2.2 Vector notation
+    '("vectorbold" t) '("vectorbold*" t)
+    '("vb" t) '("vb*" t)
+    '("vectorarrow" t) '("vectorarrow*" t)
+    '("va" t) '("va*" t)
+    '("vectorunit" t) '("vectorunit*" t)
+    '("vu" t) '("vu*" t)
+    "dotproduct" "vdot"
+    "crossproduct" "cross"
+    "cp"
+    '("gradient" TeX-arg-physics-grad)
+    '("grad" TeX-arg-physics-grad)
+    '("divergence" TeX-arg-physics-grad)
+    '("div" TeX-arg-physics-grad)
+    "divisionsymbol"
+    '("curl" TeX-arg-physics-grad)
+    '("laplacian" TeX-arg-physics-grad)
+   ;; 2.3 Operators
+    '("sin" TeX-arg-physics-trig)
+    '("sinh" TeX-arg-physics-trig)
+    '("arcsin" TeX-arg-physics-trig)
+    '("asin" TeX-arg-physics-trig)
+    '("cos" TeX-arg-physics-trig)
+    '("cosh" TeX-arg-physics-trig)
+    '("arccos" TeX-arg-physics-trig)
+    '("acos" TeX-arg-physics-trig)
+    '("tan" TeX-arg-physics-trig)
+    '("tanh" TeX-arg-physics-trig)
+    '("arctan" TeX-arg-physics-trig)
+    '("atan" TeX-arg-physics-trig)
+    '("csc" TeX-arg-physics-trig)
+    '("csch" TeX-arg-physics-trig)
+    '("arccsc" TeX-arg-physics-trig)
+    '("acsc" TeX-arg-physics-trig)
+    "sine"      "hypsine"      "arcsine"      "asine"
+    "cosine"    "hypcosine"    "arccosine"    "acosine"
+    "tangent"   "hyptangent"   "arctangent"   "atangent"
+    "cosecant"  "hypcosecant"  "arccosecant"  "acosecant"
+    "secant"    "hypsecant"    "arcsecant"    "asecant"
+    "cotangent" "hypcotangent" "arccotangent" "acotangent"
+    '("exp" TeX-arg-physics-exp)
+    '("log" TeX-arg-physics-exp)
+    '("ln" TeX-arg-physics-exp)
+    '("det" TeX-arg-physics-exp)
+    '("Pr" TeX-arg-physics-exp)
+    "exponential" "logarithm" "naturallogarithm" "determinant" "Probability"
+    '("tr" TeX-arg-physics-exp)
+    '("Tr" TeX-arg-physics-exp)
+    "rank" "erf"
+    '("Res" TeX-arg-physics-exp)
+    '("principalvalue" t)
+    '("pv" t) '("PV" t)
+    '("Re" TeX-arg-physics-ReIm)
+    '("Im" TeX-arg-physics-ReIm)
+    "real" "imaginary"
+    ;; 2.4 Quick quad text
+    '("qqtext" t)
+    '("qqtext*" t)
+    '("qq" t) '("qq*" t)
+    "qcomma" "qcomma*" "qc" "qc*" "qcc" "qcc*"
+    "qif" "qif*" "qthen" "qthen*" "qelse" "qelse*" "qotherwise" "qotherwise*"
+    "qunless" "qunless*" "qgiven" "qgiven*" "qusing" "qusing*"
+    "qassume" "qassume*" "qsince" "qsince*" "qlet" "qlet*" "qfor" "qfor*"
+    "qall" "qall*" "qeven" "qeven*" "qodd" "qodd*" "qinteger" "qinteger*"
+    "qand" "qand*" "qor" "qor*" "qas" "qas*" "qin" "qin*"
+    ;; 2.5 Derivatives
+    '("differential" ["Power"] TeX-arg-physics-dd)
+    '("dd" ["Power"] TeX-arg-physics-dd)
+    '("derivative" TeX-arg-physics-derivative)
+    '("derivative*" TeX-arg-physics-derivative)
+    '("dv" TeX-arg-physics-derivative)
+    '("dv*" TeX-arg-physics-derivative)
+    '("partialderivative" (TeX-arg-physics-derivative t))
+    '("partialderivative*" (TeX-arg-physics-derivative t))
+    '("pderivative" (TeX-arg-physics-derivative t))
+    '("pderivative*" (TeX-arg-physics-derivative t))
+    '("pdv" (TeX-arg-physics-derivative t))
+    '("pdv*" (TeX-arg-physics-derivative t))
+    '("variation" ["Power"] TeX-arg-physics-dd)
+    '("var" ["Power"] TeX-arg-physics-dd)
+    '("functionalderivative" TeX-arg-physics-derivative)
+    '("fdv" TeX-arg-physics-derivative)
+    ;; 2.6 Dirac bra-ket notation
+    '("bra" t)
+    '("bra*" t)
+    '("ket" t)
+    '("ket*" t)
+    '("innerproduct" TeX-arg-physics-braket)
+    '("innerproduct*" TeX-arg-physics-braket)
+    '("braket" TeX-arg-physics-braket)
+    '("braket*" TeX-arg-physics-braket)
+    '("ip" TeX-arg-physics-braket)
+    '("outerproduct" TeX-arg-physics-ketbra)
+    '("outerproduct*" TeX-arg-physics-ketbra)
+    '("dyad" TeX-arg-physics-ketbra)
+    '("dyad*" TeX-arg-physics-ketbra)
+    '("ketbra" TeX-arg-physics-ketbra)
+    '("ketbra*" TeX-arg-physics-ketbra)
+    '("op" TeX-arg-physics-ketbra)
+    '("op*" TeX-arg-physics-ketbra)
+    '("expectationvalue" TeX-arg-physics-expval)
+    '("expectationvalue*" TeX-arg-physics-expval)
+    '("expval" TeX-arg-physics-expval)
+    '("expval*" TeX-arg-physics-expval)
+    '("ev" TeX-arg-physics-expval)
+    '("ev*" TeX-arg-physics-expval)
+    '("matrixelement" 3)
+    '("matrixelement*" 3)
+    '("matrixelement**" 3)
+    '("matrixel" 3) '("matrixel*" 3) '("matrixel**" 3)
+    '("mel" 3) '("mel*" 3) '("mel**" 3)
+    ;; 2.7 Matrix macros
+    '("matrixquantity" TeX-arg-physics-mqty)
+    '("matrixquantity*" TeX-arg-physics-mqty*)
+    '("mqty" TeX-arg-physics-mqty)
+    '("mqty*" TeX-arg-physics-mqty*)
+    '("pmqty" t) '("Pmqty" t) '("bmqty" t) '("vmqty" t)
+    '("smallmatrixquantity" TeX-arg-physics-mqty)
+    '("smallmatrixquantity*" TeX-arg-physics-mqty*)
+    '("smqty" TeX-arg-physics-mqty)
+    '("smqty*" TeX-arg-physics-mqty*)
+    '("spmqty" t) '("sPmqty" t) '("sbmqty" t) '("svmqty" t)
+    '("matrixdeterminant" t)
+    '("mdet" t) '("smdet" t)
+    '("identitymatrix" "Size")
+    '("imat" "Size")
+    '("xmatrix" "Element" "Rows" "Cols")
+    '("xmatrix*" "Element" "Rows" "Cols")
+    '("xmat" "Element" "Rows" "Cols") '("xmat*" "Element" "Rows" "Cols")
+    '("zeromatrix" "Rows" "Cols")
+    '("zmat" "Rows" "Cols")
+    '("paulimatrix" "0,1,2,3 or x,y,z")
+    '("pmat" "0,1,2,3 or x,y,z")
+    '("diagonalmatrix" ["Filler"] t)
+    '("dmat" ["Filler"] t)
+    '("antidiagonalmatrix" ["Filler"] t)
+    '("admatrix" ["Filler"] t)))
+ TeX-dialect)
+
+(defvar LaTeX-physics-package-options
+  '("bolddel" "arrowdel" "trig" "notrig" "uprightdiff" "italicdiff")
+  "Package options for the physics package.")
+
+;;; physics.el ends here



reply via email to

[Prev in Thread] Current Thread [Next in Thread]