summaryrefslogtreecommitdiff
path: root/elpa/auctex-13.1.3/style/thmtools.el
diff options
context:
space:
mode:
Diffstat (limited to 'elpa/auctex-13.1.3/style/thmtools.el')
-rw-r--r--elpa/auctex-13.1.3/style/thmtools.el313
1 files changed, 313 insertions, 0 deletions
diff --git a/elpa/auctex-13.1.3/style/thmtools.el b/elpa/auctex-13.1.3/style/thmtools.el
new file mode 100644
index 0000000..d17b30e
--- /dev/null
+++ b/elpa/auctex-13.1.3/style/thmtools.el
@@ -0,0 +1,313 @@
+;;; thmtools.el --- AUCTeX style for `thmtools.sty' (v0.72) -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2018--2021 Free Software Foundation, Inc.
+
+;; Author: Arash Esbati <arash@gnu.org>
+;; Maintainer: auctex-devel@gnu.org
+;; Created: 2018-07-07
+;; 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 `thmtools.sty' (v0.72) from 2020/08/01.
+;; `thmtools.sty' is part of TeXLive.
+
+;;; Code:
+
+;; Silence the compiler:
+(declare-function font-latex-add-keywords
+ "font-latex"
+ (keywords class))
+
+;; Needed for auto-parsing:
+(require 'tex)
+(require 'latex)
+
+;; Setup for \declaretheoremstyle:
+(TeX-auto-add-type "thmtools-declaretheoremstyle" "LaTeX")
+
+(defvar LaTeX-thmtools-declaretheoremstyle-regexp
+ `(,(concat "\\\\declaretheoremstyle"
+ "[ \t\n\r%]*"
+ "\\(?:"
+ (LaTeX-extract-key-value-label 'none)
+ "\\)?"
+ "[ \t\n\r%]*"
+ "{\\([^}]+\\)}")
+ 1 LaTeX-auto-thmtools-declaretheoremstyle)
+ "Matches the argument of \\declaretheoremstyle from thmtools package.")
+
+;; Setup for \declaretheorem:
+(TeX-auto-add-type "thmtools-declaretheorem" "LaTeX")
+
+(defvar LaTeX-thmtools-declaretheorem-regexp
+ `(,(concat "\\\\declaretheorem"
+ "[ \t\n\r%]*"
+ "\\(?:"
+ (LaTeX-extract-key-value-label 'none)
+ "\\)?"
+ "[ \t\n\r%]*"
+ "{\\([^}]+\\)}")
+ 1 LaTeX-auto-thmtools-declaretheorem)
+ "Matches the argument of \\declaretheorem from thmtools package.")
+
+(defun LaTeX-thmtools-auto-prepare ()
+ "Clear `LaTeX-auto-thmtools-*' before parsing."
+ (setq LaTeX-auto-thmtools-declaretheoremstyle nil
+ LaTeX-auto-thmtools-declaretheorem nil))
+
+(defun LaTeX-thmtools-auto-cleanup ()
+ "Process parsed elements from thmtools package."
+ (dolist (newthm (mapcar #'car (LaTeX-thmtools-declaretheorem-list)))
+ (LaTeX-add-environments `(,newthm LaTeX-thmtools-env-label))))
+
+(add-hook 'TeX-auto-prepare-hook #'LaTeX-thmtools-auto-prepare t)
+(add-hook 'TeX-auto-cleanup-hook #'LaTeX-thmtools-auto-cleanup t)
+(add-hook 'TeX-update-style-hook #'TeX-auto-parse t)
+
+(defun LaTeX-thmtools-declaretheoremstyle-key-val (optional &optional prompt)
+ "Query and return a key=val string for \\declaretheoremstyle macro.
+If OPTIONAL is non-nil, indicate an optional argument in
+minibuffer. PROMPT replaces the standard one."
+ (let ((lengths (mapcar (lambda (x)
+ (concat TeX-esc x))
+ (mapcar #'car (LaTeX-length-list))))
+ (fonts (mapcar (lambda (x)
+ (concat TeX-esc x))
+ '("rmfamily" "sffamily" "ttfamily" "mdseries" "bfseries"
+ "upshape" "itshape" "slshape" "scshape"
+ "tiny" "scriptsize" "footnotesize"
+ "small" "normalsize" "large"
+ "Large" "LARGE" "huge" "Huge" "normalfont"))))
+ (TeX-read-key-val
+ optional
+ `(("spaceabove" ,lengths)
+ ("spacebelow" ,lengths)
+ ("headfont" ,fonts)
+ ("notefont" ,fonts)
+ ("bodyfont" ,fonts)
+ ("headpunct")
+ ("notebraces")
+ ("postheadspace" ,lengths)
+ ("headformat" ("margin" "swapnumber" "\\NUMBER" "\\NAME" "\\NOTE"))
+ ("headindent" ,lengths))
+ prompt)))
+
+(defun LaTeX-arg-thmtools-declaretheoremstyle (optional &optional prompt)
+ "Insert the key=val and style name defined by \\declaretheoremstyle.
+If OPTIONAL is non-nil, also insert the second argument in square
+brackets. PROMPT replaces the standard one for the second
+argument."
+ (let ((TeX-arg-opening-brace "[")
+ (TeX-arg-closing-brace "]"))
+ (TeX-argument-insert
+ (LaTeX-thmtools-declaretheoremstyle-key-val t)
+ t))
+ (let ((style (TeX-read-string
+ (TeX-argument-prompt optional prompt "Style"))))
+ (LaTeX-add-thmtools-declaretheoremstyles style)
+ (TeX-argument-insert style optional)))
+
+(defun LaTeX-thmtools-declaretheorem-key-val (optional &optional prompt)
+ "Query and return a key=val string for \\declaretheorem macro.
+If OPTIONAL is non-nil, indicate an optional argument in
+minibuffer. PROMPT replaces the standard one."
+ (let ((counters (mapcar #'car (LaTeX-counter-list))))
+ (TeX-read-key-val
+ optional
+ `(("parent" ,counters)
+ ("numberwithin" ,counters)
+ ("within" ,counters)
+ ("sibling" ,counters)
+ ("numberlike" ,counters)
+ ("sharenumber" ,counters)
+ ("title")
+ ("name")
+ ("heading")
+ ("numbered" ("yes" "no" "unless unique"))
+ ("style"
+ ,(append
+ ;; check for \newtheoremstyle from amsthm.sty:
+ (when (and (fboundp 'LaTeX-amsthm-newtheoremstyle-list)
+ (LaTeX-amsthm-newtheoremstyle-list))
+ (mapcar #'car (LaTeX-amsthm-newtheoremstyle-list)))
+ ;; check for \newtheoremstyle from ntheorem.sty:
+ (when (and (fboundp 'LaTeX-ntheorem-newtheoremstyle-list)
+ (LaTeX-ntheorem-newtheoremstyle-list))
+ (mapcar #'car (LaTeX-ntheorem-newtheoremstyle-list)))
+ ;; thmtools version is called \declaretheoremstyle:
+ (mapcar #'car (LaTeX-thmtools-declaretheoremstyle-list))))
+ ("preheadhook")
+ ("postheadhook")
+ ("prefoothook")
+ ("postfoothook")
+ ("refname")
+ ("Refname")
+ ("shaded" ("textwidth" "bgcolor" "rulecolor" "rulewidth" "margin"))
+ ("thmbox" ("L" "M" "S")))
+ prompt)))
+
+(defun LaTeX-arg-thmtools-declaretheorem (optional &optional prompt)
+ "Insert the key=val and environment name defined by \\declaretheorem.
+If OPTIONAL is non-nil, also insert the second argument in square
+brackets. PROMPT replaces the standard one for the second
+argument."
+ (let ((env (TeX-read-string
+ (TeX-argument-prompt optional prompt "Environment"))))
+ (LaTeX-add-environments `(,env LaTeX-thmtools-env-label))
+ (TeX-argument-insert env optional))
+ (let ((TeX-arg-opening-brace "[")
+ (TeX-arg-closing-brace "]"))
+ (TeX-argument-insert
+ (LaTeX-thmtools-declaretheorem-key-val t)
+ t)))
+
+(defun LaTeX-thmtools-listoftheorems-key-val (optional &optional prompt)
+ "Query and return a key=val string for \\listoftheorems macro.
+If OPTIONAL is non-nil, indicate an optional argument in
+minibuffer. PROMPT replaces the standard one."
+ (let ((lengths (mapcar (lambda (x)
+ (concat TeX-esc x))
+ (mapcar #'car (LaTeX-length-list))))
+ (thms (append
+ ;; check for \newtheorem from amsthm.sty:
+ (when (and (fboundp 'LaTeX-amsthm-newtheorem-list)
+ (LaTeX-amsthm-newtheorem-list))
+ (mapcar #'car (LaTeX-amsthm-newtheorem-list)))
+ ;; check for \newtheorem from ntheorem.sty:
+ (when (and (fboundp 'LaTeX-ntheorem-newtheorem-list)
+ (LaTeX-ntheorem-newtheorem-list))
+ (mapcar #'car (LaTeX-ntheorem-newtheorem-list)))
+ ;; thmtools version is called \declaretheorem:
+ (mapcar #'car (LaTeX-thmtools-declaretheorem-list)))))
+ (TeX-read-key-val
+ optional
+ `(("title")
+ ("ignore" ,thms)
+ ("ignoreall" ("true" "false"))
+ ("show" ,thms)
+ ("showall" ("true" "false"))
+ ("onlynamed" ,thms)
+ ("swapnumber" ("true" "false"))
+ ("numwidth" ,lengths))
+ prompt)))
+
+(defun LaTeX-arg-thmtools-listoftheorems (optional &optional prompt)
+ "Insert the key=val to \\listoftheorems macro.
+If OPTIONAL is non-nil, insert the result square brackets.
+OPTIONAL and PROMPT are passed to `LaTeX-thmtools-listoftheorems-key-val'."
+ (TeX-argument-insert
+ (LaTeX-thmtools-listoftheorems-key-val optional prompt)
+ optional))
+
+(defun LaTeX-thmtools-env-label (environment)
+ "Insert thmtools ENVIRONMENT, query for an optional argument and label.
+AUCTeX users should add ENVIRONMENT to `LaTeX-label-alist' via
+customize or in init-file with:
+
+ (add-to-list \\='LaTeX-label-alist \\='(\"theorem\" . \"thm:\"))
+
+RefTeX users should customize or add ENVIRONMENT to
+`LaTeX-label-alist' and `reftex-label-alist', for example
+
+ (add-to-list \\='LaTeX-label-alist \\='(\"theorem\" . \"thm:\"))
+ (add-to-list \\='reftex-label-alist
+ \\='(\"theorem\" ?m \"thm:\" \"~\\ref{%s}\"
+ nil (\"Theorem\" \"theorem\") nil))"
+ (let* ((help-form "\
+Select the content of the optional argument with a key:
+'h' in order to insert a plain heading,
+'k' in order to insert key=value pairs with completion,
+RET in order to leave it empty.")
+ (choice (read-char-choice
+ (TeX-argument-prompt
+ nil nil "Heading (h), Key=val (k), Empty (RET)")
+ '(?h ?k)))
+ (opthead (cond ((= choice ?h)
+ (TeX-read-string
+ (TeX-argument-prompt t nil "Heading")))
+ ((= choice ?k)
+ (TeX-read-key-val
+ t
+ `(("name")
+ ("continues" ,(mapcar #'car (LaTeX-label-list)))
+ ("restate" ,(mapcar #'car (LaTeX-label-list)))
+ ;; We don't offer a label key here: It is
+ ;; marked "experimental" in the manual and
+ ;; inserting and parsing \label{foo} is
+ ;; much easier for AUCTeX and RefTeX
+ ;; ("label")
+ ("listhack" ("true" "false")))))
+ (t ""))))
+ (LaTeX-insert-environment environment
+ (when (and opthead
+ (not (string= opthead "")))
+ (format "[%s]" opthead))))
+ (when (LaTeX-label environment 'environment)
+ (LaTeX-newline)
+ (indent-according-to-mode)))
+
+(TeX-add-style-hook
+ "thmtools"
+ (lambda ()
+
+ ;; Add thmtools to the parser.
+ (TeX-auto-add-regexp LaTeX-thmtools-declaretheoremstyle-regexp)
+ (TeX-auto-add-regexp LaTeX-thmtools-declaretheorem-regexp)
+
+ (TeX-add-symbols
+ '("declaretheoremstyle" LaTeX-arg-thmtools-declaretheoremstyle)
+ '("declaretheorem" LaTeX-arg-thmtools-declaretheorem)
+
+ '("listoftheorems" [ LaTeX-arg-thmtools-listoftheorems ])
+ '("ignoretheorems"
+ (TeX-arg-eval mapconcat #'identity
+ (TeX-completing-read-multiple
+ (TeX-argument-prompt nil nil "Environment(s)")
+ (append
+ ;; check for \newtheorem from amsthm.sty:
+ (when (and (fboundp 'LaTeX-amsthm-newtheorem-list)
+ (LaTeX-amsthm-newtheorem-list))
+ (mapcar #'car (LaTeX-amsthm-newtheorem-list)))
+ ;; check for \newtheorem from ntheorem.sty:
+ (when (and (fboundp 'LaTeX-ntheorem-newtheorem-list)
+ (LaTeX-ntheorem-newtheorem-list))
+ (mapcar #'car (LaTeX-ntheorem-newtheorem-list)))
+ ;; thmtools version is called \declaretheorem:
+ (mapcar #'car (LaTeX-thmtools-declaretheorem-list))))
+ ","))
+ '("listtheoremname" 0))
+
+ ;; Fontification
+ (when (and (featurep 'font-latex)
+ (eq TeX-install-font-lock 'font-latex-setup))
+ (font-latex-add-keywords '(("declaretheoremstyle" "[{")
+ ("declaretheorem" "[{[")
+ ("listoftheorems" "[")
+ ("ignoretheorems" "{"))
+ 'function)))
+ TeX-dialect)
+
+;; The package has only one option `debug'. We ignore that in order
+;; to make loading faster:
+(defvar LaTeX-thmtools-package-options nil
+ "Package options for the thmtools package.")
+
+;;; thmtools.el ends here