diff options
Diffstat (limited to 'elpa/auctex-13.1.3/style/siunitx.el')
-rw-r--r-- | elpa/auctex-13.1.3/style/siunitx.el | 522 |
1 files changed, 522 insertions, 0 deletions
diff --git a/elpa/auctex-13.1.3/style/siunitx.el b/elpa/auctex-13.1.3/style/siunitx.el new file mode 100644 index 0000000..b1164a1 --- /dev/null +++ b/elpa/auctex-13.1.3/style/siunitx.el @@ -0,0 +1,522 @@ +;;; siunitx.el --- AUCTeX style for `siunitx.sty' version 3.3.36. -*- lexical-binding: t; -*- + +;; Copyright (C) 2012-2021 Free Software Foundation, Inc. + +;; Maintainer: auctex-devel@gnu.org +;; Author: Mosè Giordano <mose@gnu.org> +;; 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 `siunitx.sty' version 3.0.36 from +;; 2021/22/18. + +;;; Code: + +(require 'tex) ;Indispensable when compiling the call to `TeX-auto-add-type'. +(require 'latex) + +;; Silence the compiler: +(declare-function font-latex-add-keywords + "font-latex" + (keywords class)) +(declare-function LaTeX-color-definecolor-list "color" ()) +(declare-function LaTeX-xcolor-definecolor-list "xcolor" ()) + +(TeX-auto-add-type "siunitx-unit" "LaTeX") + +;; Self Parsing -- see (info "(auctex)Hacking the Parser"). +;; `\\(?:\\[[^]]*\\]\\)?' matches possible options (actually used only +;; by `DeclareSIUnit' macro), wrapped in `[...]'. +(defvar LaTeX-siunitx-regexp + `(,(concat "\\\\DeclareSI\\(Unit\\|Prefix\\|Power\\|Qualifier\\)" + "[ \t\n\r]*" + ;; The optional argument + "\\(?:\\[[^]]*\\]\\)?" + "[ \t\n\r]*" + ;; First mandatory argument + "{?\\\\\\([A-Za-z]+\\)}?" + "[ \t\n\r]*" + ;; Second mandatory argument needed for '\DeclareSIPower': + "{?\\\\\\([A-Za-z]+\\)}?") + (2 3 1) LaTeX-auto-siunitx-unit) + "Matches new siunitx unit, prefix, power, and qualifier definitions.") + +(defun LaTeX-siunitx-prepare () + "Clear `LaTex-auto-siunitx-unit' before use." + (setq LaTeX-auto-siunitx-unit nil)) + +(add-hook 'TeX-auto-prepare-hook #'LaTeX-siunitx-prepare t) +(add-hook 'TeX-update-style-hook #'TeX-auto-parse t) + +(defvar LaTeX-siunitx-unit-history nil + "History of units in siunitx.") + +(defun LaTeX-siunitx-unit-list-parsed () + "Return a list of units incl. the user defined ones. +This function should be preferred over the function +`LaTeX-siunitx-unit-list' since it knows about the 2 macros +defined with '\\DeclareSIPower'." + (let (result) + (dolist (unit (LaTeX-siunitx-unit-list) result) + (push (car unit) result) + (when (and (> (safe-length unit) 1) + (string-equal (nth 2 unit) "Power")) + (push (cadr unit) result))))) + +(defun LaTeX-arg-siunitx-unit (optional &optional prompt initial-input + definition prefix) + "Prompt for siunitx units, prefixes, powers, and qualifiers. +If OPTIONAL is non-nil, insert the resulting value as an optional +argument, otherwise as a mandatory one. Use PROMPT as the prompt +string. If INITIAL-INPUT is non-nil, insert it in the minibuffer +initially, with point positioned at the end. If DEFINITION is +non-nil, add the chosen unit to the list of defined units. If +PREFIX is non-nil, insert it before the given input." + ;; Remove <SPC> key binding from map used in `TeX-completing-read-multiple' + ;; with `require-match' set to `nil' (it's `crm-local-completion-map' if + ;; `completing-read-multiple' is bound, `minibuffer-local-completion-map' + ;; otherwise) and set completion separator to the TeX escape character. + (let* ((crm-local-completion-map + (remove (assoc 32 crm-local-completion-map) crm-local-completion-map)) + (minibuffer-local-completion-map + (remove (assoc 32 minibuffer-local-completion-map) + minibuffer-local-completion-map)) + (crm-separator (regexp-quote TeX-esc)) + (unit (mapconcat #'identity + (TeX-completing-read-multiple + (TeX-argument-prompt optional prompt "Unit: " t) + (LaTeX-siunitx-unit-list-parsed) + nil nil initial-input + 'LaTeX-siunitx-unit-history) + TeX-esc))) + (if (and definition (not (string-equal "" unit))) + (LaTeX-add-siunitx-units unit)) + (TeX-argument-insert unit optional prefix))) + +(defun LaTeX-arg-define-siunitx-unit (optional &optional prompt) + "Prompt for a LaTeX siunitx unit, prefix, power, and qualifier. +If OPTIONAL is non-nil, insert the resulting value as an optional +argument, otherwise as a mandatory one. Use PROMPT as the prompt +string." + (LaTeX-arg-siunitx-unit optional + (unless prompt (concat "Unit: " TeX-esc)) + nil t TeX-esc)) + +(defvar LaTeX-siunitx-package-options + '(;; Table 10: Print options + ("color") + ("mode" ("match" "math" "text")) + ("number-color") + ("number-mode" ("match" "math" "text")) + ("propagate-math-font" ("true" "false")) + ("reset-math-version" ("true" "false")) + ("reset-text-family" ("true" "false")) + ("reset-text-series" ("true" "false")) + ("reset-text-shape" ("true" "false")) + ("text-family-to-math" ("true" "false")) + ("text-font-command") + ("text-series-to-math" ("true" "false")) + ("unit-color") + ("unit-mode" ("match" "math" "text")) + ;; Table 11: Options for number parsing + ("evaluate-expression" ("true" "false")) + ("expression") + ("input-close-uncertainty") + ("input-comparators") + ("input-decimal-markers") + ("input-digits") + ("input-exponent-markers") + ("input-ignore") + ("input-open-uncertainty") + ("input-signs") + ("input-uncertainty-signs") + ("parse-numbers" ("true" "false")) + ("retain-explicit-plus" ("true" "false")) + ("retain-zero-uncertainty" ("true" "false")) + ;; Table 12: Number post-processing options + ("drop-exponent" ("true" "false")) + ("drop-uncertainty" ("true" "false")) + ("drop-zero-decimal" ("true" "false")) + ("exponent-mode" ("input" "fixed" "engineering" "scientific")) + ("fixed-exponent") + ("minimum-integer-digits") + ("minimum-decimal-digits") + ("round-half" ("up" "even")) + ("round-minimum") + ("round-mode" ("off" "figures" "places" "uncertainty")) + ("round-pad" ("true" "false")) + ("round-precision") + ;; Table 13: Output options for numbers + ("bracket-negative-numbers" ("true" "false")) + ("exponent-base") + ("exponent-product") + ("group-digits" ("all" "none" "decimal" "integer")) + ("group-minimum-digits") + ("group-separator") + ("negative-color") + ("output-close-uncertainty") + ("output-decimal-marker") + ("output-exponent-marker") + ("output-open-uncertainty") + ("print-implicit-plus" ("true" "false")) + ("print-unity-mantissa" ("true" "false")) + ("print-zero-exponent" ("true" "false")) + ("tight-spacing" ("true" "false")) + ("uncertainty-mode" ("compact" "full" "compact-marker")) + ("uncertainty-separator") + ;; Table 14: Output options for lists, products and ranges of + ;; numbers and quantities + ("list-exponents" ("individual" "combine-bracket" "combine")) + ("list-final-separator") + ("list-pair-separator") + ("list-separator") + ("list-units" ("repeat" "bracket" "single")) + ("product-exponents" ("individual" "combine-bracket" "combine")) + ("product-mode" ("symbol" "phrase")) + ("product-phrase") + ("product-symbol") + ("product-units" ("repeat" "bracket" "single")) + ("range-exponents" ("individual" "combine-bracket" "combine")) + ("range-phrase") + ("range-units" ("repeat" "bracket" "single")) + ;; Table 15: Options for complex numbers + ("complex-root-position" ("after-number" "before-number")) + ("output-complex-root") + ("input-complex-root") + ;; Table 16: Angle options + ("angle-mode" ("input" "arc" "decimal")) + ("angle-symbol-degree") + ("angle-symbol-minute") + ("angle-symbol-over-decimal" ("true" "false")) + ("angle-symbol-second") + ("angle-separator") + ("fill-angle-degrees" ("true" "false")) + ("fill-angle-minutes" ("true" "false")) + ("fill-angle-seconds" ("true" "false")) + ("number-angle-product") + ;; Table 17: Unit creation options + ("free-standing-units" ("true" "false")) + ("overwrite-command" ("true" "false")) + ("space-before-unit" ("true" "false")) + ("unit-optional-argument" ("true" "false")) + ("use-xspace" ("true" "false")) + ;; Table 18: Unit output options + ("bracket-unit-denominator" ("true" "false")) + ("forbid-literal-units" ("true" "false")) + ("fraction-command") + ("inter-unit-product") + ("parse-units" ("true" "false")) + ("per-mode" ("power" "fraction" "symbol" + "repeated-symbol" "symbol-or-fraction")) + ("per-symbol") + ("qualifier-mode" ("subscript" "brackets" + "combine" "phrase")) + ("qualifier-phrase") + ("sticky-per" ("true" "false")) + ("unit-font-command") + ;; Table 19: Options for quantities + ("allow-number-unit-breaks" ("true" "false")) + ("extract-mass-in-kilograms" ("true" "false")) + ("prefix-mode" ("input" "combine-exponent" + "extract-exponent")) + ("quantity-product") + ("separate-uncertainty-units") + ;; Table 20: Options for tabular material + ("table-align-comparator" ("true" "false")) + ("table-align-exponent" ("true" "false")) + ("table-align-text-after" ("true" "false")) + ("table-align-text-before" ("true" "false")) + ("table-align-uncertainty" ("true" "false")) + ("table-alignment" ("center" "left" "right" "none")) + ("table-alignment-mode" ("format" "marker" "none")) + ("table-auto-round" ("true" "false")) + ("table-column-width") + ("table-fixed-width" ("true" "false")) + ("table-format") + ("table-number-alignment" ("center" "left" "right")) + ("table-text-alignment" ("center" "left" "right")) + ;; 4.13 Locale options + ("locale" ("FR" "DE" "UK" "US" "ZA"))) + "Package options for the siunitx package.") + +(defun LaTeX-siunitx-key-val-options () + "Return an updated list of key=vals from siunitx package." + (append + (when (and (or (member "xcolor" (TeX-style-list)) + (member "color" TeX-active-styles))) + (let* ((colorcmd (if (member "xcolor" TeX-active-styles) + #'LaTeX-xcolor-definecolor-list + #'LaTeX-color-definecolor-list)) + (colors (mapcar #'car (funcall colorcmd))) + (keys '("color" + "number-color" + "unit-color" + "negative-color")) + result) + (dolist (key keys result) + (push (list key colors) result)))) + LaTeX-siunitx-package-options)) + +(TeX-add-style-hook + "siunitx" + (lambda () + + (TeX-auto-add-regexp LaTeX-siunitx-regexp) + + (TeX-add-symbols + '("sisetup" (TeX-arg-key-val (LaTeX-siunitx-key-val-options))) + + ;; 3.1 Numbers + '("num" [TeX-arg-key-val (LaTeX-siunitx-key-val-options)] "Number") + '("numlist" [TeX-arg-key-val (LaTeX-siunitx-key-val-options)] "Numbers") + '("numproduct" [TeX-arg-key-val (LaTeX-siunitx-key-val-options)] "Numbers") + '("numrange" [TeX-arg-key-val (LaTeX-siunitx-key-val-options)] + "Number 1" "Number 2") + + ;; 3.2 Angles + '("ang" [TeX-arg-key-val (LaTeX-siunitx-key-val-options)] "Angle") + + ;; 3.3 Units + ;; For 'qty' and 'units', see 8 Compatibility with other packages + '("qtylist" [TeX-arg-key-val (LaTeX-siunitx-key-val-options)] + "Numbers" LaTeX-arg-siunitx-unit) + '("qtyproduct" [TeX-arg-key-val (LaTeX-siunitx-key-val-options)] + "Numbers" LaTeX-arg-siunitx-unit) + '("qtyrange" [TeX-arg-key-val (LaTeX-siunitx-key-val-options)] + "Number 1" "Number 2" LaTeX-arg-siunitx-unit) + + ;; 3.4 Complex numbers and quantities + '("complexnum" [TeX-arg-key-val (LaTeX-siunitx-key-val-options)] + "Number") + '("complexqty" [TeX-arg-key-val (LaTeX-siunitx-key-val-options)] + "Number" LaTeX-arg-siunitx-unit) + + ;; 3.7 Creating new macros + '("DeclareSIUnit" [TeX-arg-key-val (LaTeX-siunitx-key-val-options)] + (LaTeX-arg-define-siunitx-unit) "Symbol") + + '("DeclareSIPrefix" (LaTeX-arg-define-siunitx-unit "Prefix") + "Symbol" "Powers of 10") + + '("DeclareSIPower" + (LaTeX-arg-define-siunitx-unit "Symbol before") + (LaTeX-arg-define-siunitx-unit "Symbol after") + "Power") + + '("DeclareSIQualifier" (LaTeX-arg-define-siunitx-unit "Qualifier") "Symbol") + + ;; 3.8 Tabular material + '("tablenum" [TeX-arg-key-val (LaTeX-siunitx-key-val-options)] "Number") + + ;; 5 Upgrading from version 2 + ;; The next set of macros are still available in siunitx.sty v3 + ;; but are not recommended for use in new documents. We provide + ;; them in this file anyway since they are also needed when other + ;; packages like physics or units are loaded: + '("si" [TeX-arg-key-val (LaTeX-siunitx-package-options)] LaTeX-arg-siunitx-unit) + '("SI" [TeX-arg-key-val (LaTeX-siunitx-package-options)] + "Value" ["Pre-unit"] LaTeX-arg-siunitx-unit) + '("SIlist" [TeX-arg-key-val (LaTeX-siunitx-package-options)] + "Values" LaTeX-arg-siunitx-unit) + '("SIrange" [TeX-arg-key-val (LaTeX-siunitx-package-options)] + "Value 1" "Value 2" LaTeX-arg-siunitx-unit)) + + ;; 8 Compatibility with other packages + ;; Avoid clash with other packages which define macros with the + ;; same name: + (let ((styles (TeX-style-list))) + (unless (member "physics" styles) + (TeX-add-symbols + '("qty" [TeX-arg-key-val (LaTeX-siunitx-key-val-options)] + "Number" LaTeX-arg-siunitx-unit))) + (unless (member "units" styles) + (TeX-add-symbols + '("unit" [TeX-arg-key-val (LaTeX-siunitx-key-val-options)] + LaTeX-arg-siunitx-unit)))) + + ;; The unit macros + (LaTeX-add-siunitx-units + ;; Table 1: SI base units. + "ampere" + "candela" + "kelvin" + "kilogram" + "meter" + "metre" + "second" + ;; Table 2: Coherent derived units in the SI with special names + ;; and symbols + "becquerel" + ;; "celsius" + "degreeCelsius" + "coulomb" + "farad" + "gray" + "hertz" + "henry" + "joule" + "lumen" + "katal" + "lux" + "newton" + "ohm" + "pascal" + "radian" + "siemens" + "sievert" + "steradian" + "tesla" + "volt" + "watt" + "weber" + ;; Table 3: Non-SI units accepted for use with the International + ;; System of Units + "astronomicalunit" + "bel" + "dalton" + "day" + "decibel" + "degree" + "electronvolt" + "hectare" + "hour" + "liter" + "litre" + "arcminute" + "minute" + "arcsecond" + "neper" + "tonne" + ;; 3.5 The unit macros + "percent" + "square" + "squared" + "cubic" + "cubed" + "tothe" + "raiseto" + "per" + "of" + "highlight" ; Defined by siunitx.sty + ;; Table 4: SI prefixes + "yocto" + "zepto" + "atto" + "femto" + "pico" + "nano" + "micro" + "milli" + "centi" + "deci" + "deca" + "deka" + "hecto" + "kilo" + "mega" + "giga" + "tera" + "peta" + "exa" + "zetta" + "yotta") + + ;; 3.6 Unit abbreviations are always defined: + (LaTeX-add-siunitx-units + "fg" "pg" "ng" "ug" "mg" "g" "kg" + "pm" "nm" "um" "mm" "cm" "dm" "m" "km" + "as" "fs" "ps" "ns" "us" "ms" "s" + "fmol" "pmol" "nmol" "umol" "mmol" "mol" "kmol" + "pA" "nA" "uA" "mA" "A" "kA" + "ul" "ml" "l" "hl" "uL" "mL" "L" "hL" + "mHz" "Hz" "kHz" "MHz" "GHz" "THz" + "mN" "N" "kN" "MN" + "Pa" "kPa" "MPa" "GPa" + "mohm" "kohm" "Mohm" + "pV" "nV" "uV" "mV" "V" "kV" + "uW" "mW" "W" "kW" "MW" "GW" + "J" "uJ" "mJ" "kJ" + "eV" "meV" "keV" "MeV" "GeV" "TeV" "kWh" + "F" "fF" "pF" "nF" "uF" + "H" "mH" "uH" + "K" "dB" + "kibi" "mebi" "gibi" "tebi" "pebi" + "exbi" "zebi" "yobi" "bit" "byte") + + ;; \cancel is only available when cancel.sty is loaded: + (when (member "cancel" (TeX-style-list)) + (LaTeX-add-siunitx-units "cancel")) + + ;; FIXME: 'siunitx.sty' adds only one new column specification + ;; letter 'S' in v3 and 's' is removed. We keep 's' for older + ;; documents and remove it sometimes later. + (set (make-local-variable 'LaTeX-array-column-letters) + (concat LaTeX-array-column-letters "S" "s")) + + (TeX-run-style-hooks "l3keys2e" + "array" + "amstext" + "xparse" + "expl3") + + ;; Fontification + (when (and (featurep 'font-latex) + (eq TeX-install-font-lock 'font-latex-setup)) + (font-latex-add-keywords '(("num" "[{") + ("numlist" "[{") + ("numproduct" "[{") + ("numrange" "[{{") + ("ang" "[{") + ("qtylist" "[{{") + ("qtyrange" "[{{{") + ("complexnum" "[{") + ("complexqty" "[{") + ("DeclareSIUnit" "[|{\\{") + ("DeclareSIPrefix" "|{\\{{") + ("DeclareSIPower" "|{\\|{\\{") + ("DeclareSIQualifier" "|{\\{") + ("tablenum" "[{") + ("highlight" "{") + ("sisetup" "{") + ;; These macros are deprecated in v3 but + ;; still available: + ("si" "[{") + ("SI" "[{[{") + ("SIlist" "[{{") + ("SIrange" "[{{{")) + 'function) + (let ((styles (TeX-style-list))) + (unless (member "physics" styles) + (font-latex-add-keywords '(("qty" "[{{")) + 'function)) + (unless (member "units" styles) + (font-latex-add-keywords '(("unit" "[{")) + 'function))))) + TeX-dialect) + +(defun LaTeX-siunitx-package-options nil + "Prompt for package options for the siunitx package." + (TeX-read-key-val t (append + ;; 'table-column-type' is a preamble only: + '(("table-column-type")) + LaTeX-siunitx-package-options))) + +;; siunitx.el ends here |