diff options
Diffstat (limited to 'elpa/auctex-13.1.3/style/titlesec.el')
-rw-r--r-- | elpa/auctex-13.1.3/style/titlesec.el | 269 |
1 files changed, 269 insertions, 0 deletions
diff --git a/elpa/auctex-13.1.3/style/titlesec.el b/elpa/auctex-13.1.3/style/titlesec.el new file mode 100644 index 0000000..c3af038 --- /dev/null +++ b/elpa/auctex-13.1.3/style/titlesec.el @@ -0,0 +1,269 @@ +;;; titlesec.el --- AUCTeX style for `titlesec.sty' (v2.11) -*- lexical-binding: t; -*- + +;; Copyright (C) 2016--2022 Free Software Foundation, Inc. + +;; Author: Arash Esbati <arash@gnu.org> +;; Maintainer: auctex-devel@gnu.org +;; Created: 2015-09-19 +;; 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 `titlesec.sty' (v2.11) from +;; 2019/07/16. `titlesec.sty' is part of TeXLive. + +;;; Code: + +(require 'tex) +(require 'latex) + +;; Silence the compiler: +(declare-function font-latex-add-keywords + "font-latex" + (keywords class)) + +(defvar LaTeX-titlesec-key-val-options + '(("page" ("even" "odd")) + ("numberless")) + "Key=value options for \"\\titleformat\" and \"\\titlespacing\" +macros provided by \"titlesec.sty\".") + +(defvar LaTeX-titlesec-section-command-list + '("part" + "chapter" + "section" + "subsection" + "subsubsection" + "paragraph" + "subparagraph") + "List of sectioning commands available in \"titlesec.sty\".") + +(defvar LaTeX-titlesec-section-shape-list + '("hang" + "block" + "display" + "runin" + "leftmargin" + "rightmargin" + "drop" + "wrap" + "frame") + "List of sectioning shapes available for \"\\titleformat\" command.") + +(defun LaTeX-titlesec-section-command-list () + "Remove \"chapter\" from variable +`LaTeX-titlesec-section-command-list' and return the remainder. +Removal is based on the return value of function +`LaTeX-largest-level'. Items returned are prefixed with +`TeX-esc'." + (mapcar (lambda (elt) (concat TeX-esc elt)) + (if (< (LaTeX-largest-level) 2) + (symbol-value 'LaTeX-titlesec-section-command-list) + (remove "chapter" LaTeX-titlesec-section-command-list)))) + +(defun LaTeX-arg-titlesec-titlespec (optional) + "Insert the first argument of \"\\titleformat\" and \"\\titlespacing\". +Depending on returned value of function `LaTeX-largest-level', +append a \"name\" key with corresponding values to +`LaTeX-titlesec-key-val-options'. The values are retrieved from +`LaTeX-titlesec-section-command-list'. The values of this list +are also added stand-alone as keys. If OPTIONAL is non-nil, +insert the argument in brackets." + (let ((keyvals + (TeX-read-key-val + optional + (append + `(("name" + ,(mapcar (lambda (elt) (concat TeX-esc elt)) + (if (< (LaTeX-largest-level) 2) + (symbol-value 'LaTeX-titlesec-section-command-list) + (remove "chapter" LaTeX-titlesec-section-command-list))))) + (mapcar #'list + (mapcar (lambda (elt) (concat TeX-esc elt)) + (if (< (LaTeX-largest-level) 2) + (symbol-value 'LaTeX-titlesec-section-command-list) + (remove "chapter" LaTeX-titlesec-section-command-list)))) + LaTeX-titlesec-key-val-options) + "Sectioning command"))) + (TeX-argument-insert keyvals optional))) + +(TeX-add-style-hook + "titlesec" + (lambda () + + ;; Load "titleps.el" when "pagestyles" package option is given + (when (LaTeX-provided-package-options-member "titlesec" "pagestyles") + (TeX-run-style-hooks "titleps")) + + (TeX-add-symbols + ;; 2.4. Tools + '("titlelabel" t) + + ;; \titleformat*{<command>}{<format>} + '("titleformat*" (LaTeX-arg-titlesec-titlespec) t) + + ;; 3. Advanced Interface + ;; \titleformat{<command>}[<shape>]{<format>}{<label>}{<sep>}{<before-code>}[<after-code>] + '("titleformat" + (LaTeX-arg-titlesec-titlespec) + [TeX-arg-eval completing-read + (TeX-argument-prompt t nil "Shape") + LaTeX-titlesec-section-shape-list] + (TeX-arg-conditional (y-or-n-p "With optional after-code? ") + (4 [nil]) + (4))) + + '("chaptertitlename" 0) + + ;; 3.2. Spacing + ;; \titlespacing{<command>}{<left>}{<before-sep>}{<after-sep>}[<right-sep>] + '("titlespacing" + (LaTeX-arg-titlesec-titlespec) + (TeX-arg-length "Left margin") + (TeX-arg-length "Before vertical space") + (TeX-arg-length "Space between title and text") + [TeX-arg-length "Right margin"]) + + '("titlespacing*" + (LaTeX-arg-titlesec-titlespec) + (TeX-arg-length "Left margin") + (TeX-arg-length "Before vertical space") + (TeX-arg-length "Space between title and text") + [TeX-arg-length "Right margin"]) + + ;; 3.3. Spacing related tools + '("filright" 0) + '("filcenter" 0) + '("filleft" 0) + '("fillast" 0) + '("filinner" 0) + '("filouter" 0) + '("wordsep" 0) + '("nostruts" 0) + + ;; 3.4. Rules + '("titleline" + [TeX-arg-eval completing-read + (TeX-argument-prompt t nil "Alignment") + '("l" "r" "c")] + t) + + '("titlerule" [TeX-arg-length "Rule height"]) + + '("titlerule*" [TeX-arg-length "Box width"] "Text") + + '("iftitlemeasuring" 2) + + ;; 3.5. Page styles + '("assignpagestyle" + (TeX-arg-eval completing-read + (TeX-argument-prompt nil nil "Sectioning command") + (LaTeX-titlesec-section-command-list)) + (TeX-arg-pagestyle)) + + ;; 3.9. Creating new levels and changing the class + '("titleclass" + (TeX-arg-eval completing-read + (TeX-argument-prompt nil nil "Sectioning command") + (LaTeX-titlesec-section-command-list)) + (TeX-arg-eval completing-read + (TeX-argument-prompt nil nil "Class") + '("page" "top" "straight")) + [TeX-arg-eval completing-read + (TeX-argument-prompt t nil "Super level command") + (LaTeX-titlesec-section-command-list)]) ) + + ;; Don't increase indent at \iftitlemeasuring: + (add-to-list 'LaTeX-indent-begin-exceptions-list "iftitlemeasuring" t) + (LaTeX-indent-commands-regexp-make) + + ;; 3.4. Rules: A variant of \titleline to be used only with calcwidth + (when (LaTeX-provided-package-options-member "titlesec" "calcwidth") + (TeX-add-symbols + '("titleline*" + (TeX-arg-eval completing-read + (TeX-argument-prompt nil nil "Alignment") + '("l" "r" "c")) + t))) + + ;; The length of the longest line is returned in \titlewidth + (LaTeX-add-lengths "titlewidth" + "titlewidthlast" + "titlewidthfirst") + + ;; Fontification: We only add macros which are used at top level; + ;; most of macros definded above are intended to be used in + ;; arguments of \titleformat + (when (and (featurep 'font-latex) + (eq TeX-install-font-lock 'font-latex-setup)) + (font-latex-add-keywords '(("titlelabel" "{") + ;; + ;; \titleformat comes in 2 flavors: + ;; with *, it takes only 2 mandatory + ;; argument; w/o *, a lot more. It is + ;; not (yet) possible to realize this + ;; behaviour within font-latex. Hence + ;; we reduce the fontification to the + ;; first 2 mandatory arguments and + ;; ignore the rest. *[ are optional anyway. + ("titleformat" "*{[{") + ("titlespacing" "*{{{{[") + ("iftitlemeasuring" "{{") + ("assignpagestyle" "{{") + ("titleclass" "{[{[")) + 'function))) + TeX-dialect) + +(defvar LaTeX-titlesec-package-options + '(;; 2.1. Format + "rm" "sf" "tt" "md" "bf" "up" "it" "sl" "sc" + "big" "medium" "small" "tiny" + "raggedleft" "center" "raggedright" + + ;; 2.2. Spacing + "compact" + + ;; 2.3. Uppercase + "uppercase" + + ;; 3.3. Spacing related tools + "indentafter" "noindentafter" + "rigidchapters" "rubberchapters" + "bottomtitles" "nobottomtitles" "nobottomtitles*" + "aftersep" "largestsep" "pageatnewline" + "nostruts" + + ;; 3.4. Rules + "calcwidth" + + ;; 3.7. Other Package Options + "explicit" + "newparttoc" + "oldparttoc" + "clearempty" + "toctitles" + "newlinetospace" + "loadonly" + + ;; 5. titleps and Page Styles + "pagestyles") + "Package options for the titlesec package.") + +;;; titlesec.el ends here |