[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 54c82bd0: New style file physics.el,
Ikumi Keita <=