>From 34cacadd0f691191d2ca0f78702a519628950208 Mon Sep 17 00:00:00 2001 From: Arash Esbati Date: Sun, 8 Mar 2015 18:15:25 +0100 Subject: [PATCH 2/3] New style for caption.sty. * Makefile.in (STYLESRC): Add new style. * style/caption.el: New file. --- ChangeLog | 4 + Makefile.in | 2 +- style/caption.el | 308 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 313 insertions(+), 1 deletion(-) create mode 100644 style/caption.el diff --git a/ChangeLog b/ChangeLog index 8256dbf..1393042 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,10 @@ * Makefile.in (STYLESRC): Add new style. + * style/caption.el: New file. + + * Makefile.in (STYLESRC): Add new style. + * style/enumitem.el: New file. 2015-03-07 Mosè Giordano diff --git a/Makefile.in b/Makefile.in index d435ea4..d165fd4 100644 --- a/Makefile.in +++ b/Makefile.in @@ -145,7 +145,7 @@ STYLESRC = style/prosper.el \ style/newtxtext.el style/newtxttt.el style/minted.el \ style/wrapfig.el style/relsize.el style/currvita.el \ style/tcolorbox.el style/color.el style/expl3.el \ - style/enumitem.el + style/enumitem.el style/caption.el STYLEELC = $(STYLESRC:.el=.elc) ifeq (@preview_enabled@,yes) diff --git a/style/caption.el b/style/caption.el new file mode 100644 index 0000000..f2ea856 --- /dev/null +++ b/style/caption.el @@ -0,0 +1,308 @@ +;;; caption.el --- AUCTeX style for `caption.sty' (v3.3-89) + +;; Copyright (C) 2015 Free Software Foundation, Inc. + +;; Author: Arash Esbati +;; Maintainer: address@hidden +;; Created: 2015-02-21 +;; 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 `caption.sty' (v3.3-89) from 2013/05/02. +;; `caption.sty' is part of TeXLive. + +;; If things do not work or when in doubt, press `C-c C-n'. Comments +;; for improvement are welcome. + +;;; Code: + +;; Needed for compiling `pushnew': +(eval-when-compile (require 'cl)) + +;; Needed for auto-parsing. +(require 'tex) + +(defvar LaTeX-caption-key-val-options + '(("aboveskip") + ("belowskip") + ("font" ("scriptsize" "footnotesize" "small" "normalsize" "large" + "Large" "normalfont" "up" "it" "sl" "sc" "md" "bf" "rm" + "sf" "tt" "singlespacing" "onehalfspacing" "doublespacing" + "stretch" "normalcolor" "color" "normal")) + ("font+" ("scriptsize" "footnotesize" "small" "normalsize" "large" + "Large" "normalfont" "up" "it" "sl" "sc" "md" "bf" "rm" + "sf" "tt" "singlespacing" "onehalfspacing" "doublespacing" + "stretch" "normalcolor" "color" "normal")) + ("format" ("plain" "hang")) + ("hangindent") + ("hypcap") + ("hypcapspace") + ("indention") + ("justification" ("justified" "centering" "centerlast" "centerfirst" + "raggedright" "RaggedRight" "raggedleft")) + ("labelfont" ("scriptsize" "footnotesize" "small" "normalsize" "large" + "Large" "normalfont" "up" "it" "sl" "sc" "md" "bf" "rm" + "sf" "tt" "singlespacing" "onehalfspacing" "doublespacing" + "stretch" "normalcolor" "color" "normal")) + ("labelfont+" ("scriptsize" "footnotesize" "small" "normalsize" "large" + "Large" "normalfont" "up" "it" "sl" "sc" "md" "bf" "rm" + "sf" "tt" "singlespacing" "onehalfspacing" "doublespacing" + "stretch" "normalcolor" "color" "normal")) + ("labelformat" ("default" "empty" "simple" "brace" "parens")) + ("labelsep" ("none" "colon" "period" "space" "quad" "newline" "endash")) + ("list" ("false" "no" "off" "0" "true" "yes" "on" "1")) + ("listformat" ("empty" "simple" "paren" "subsimple" "subparens")) + ("margin" ("type*" "width")) + ("margin*") + ("maxmargin") + ("minmargin") + ("name") + ("oneside") + ("parindent") + ("parskip") + ("position" ("top" "above" "bottom" "below" "auto")) + ("singlelinecheck" ("false" "no" "off" "0" "true" "yes" "on" "1")) + ("skip") + ("strut" ("false" "no" "off" "0" "true" "yes" "on" "1")) + ("style" ("base" "default")) + ("textfont" ("scriptsize" "footnotesize" "small" "normalsize" "large" + "Large" "normalfont" "up" "it" "sl" "sc" "md" "bf" "rm" + "sf" "tt" "singlespacing" "onehalfspacing" "doublespacing" + "stretch" "normalcolor" "color" "normal")) + ("textfont+" ("scriptsize" "footnotesize" "small" "normalsize" "large" + "Large" "normalfont" "up" "it" "sl" "sc" "md" "bf" "rm" + "sf" "tt" "singlespacing" "onehalfspacing" "doublespacing" + "stretch" "normalcolor" "color" "normal")) + ("textformat" ("empty" "simple" "period")) + ("twoside") + ("type" ("figure" "table" "ContinuedFloat")) + ("type*" ("figure" "table" "ContinuedFloat")) + ("width")) + "Key=value options for caption macros.") + +(defvar LaTeX-caption-key-val-options-local nil + "Buffer-local key=value options for caption macros.") +(make-variable-buffer-local 'LaTeX-caption-key-val-options-local) + +(defvar LaTeX-caption-supported-float-types + '("figure" "table" "ContinuedFloat" ; Standard caption.sty + "sub" "subtable" "subfigure" ; subcaption.sty + "ruled" "boxed" ; float.sty + "floatingfigure" "floatingtable" ; floatflt.sty + "lstlisting" ; listings.sty + "longtable" ; longtable.sty + "figwindow" "tabwindow" ; picinpar.sty + "parpic" ; picins.sty + "SCfigure" "SCtable" ; sidecap.sty + "supertabular" "xtabular" ; supertabular.sty & xtab.sty + "threeparttable" "measuredfigure" ; threeparttable.sty + "wrapfigure" "wraptable") ; wrapfigure + "List of float types provided by other LaTeX packages and +supported by `caption.sty'.") + +;; Setup for various \DeclareCaption's: +(TeX-auto-add-type "caption-DeclareCaption" "LaTeX") + +(defvar LaTeX-caption-DeclareCaption-regexp + `(,(concat "\\\\DeclareCaption\\(Font\\|Format\\|Justification" + "\\|LabelFormat\\|LabelSeparator\\|ListFormat" + "\\|Option\\|Style\\|TextFormat\\)" + "\\*?" + "[ \t\n\r%]*" + "{\\([^}]+\\)}" + "[ \t\n\r%]*" + "{\\([^}]+\\)}") + (0 1 2) LaTeX-auto-caption-DeclareCaption) + "Matches the arguments of different `\\DeclareCaption*' from +`caption.sty'.") + +(defun LaTeX-caption-auto-prepare () + "Clear `LaTeX-auto-caption-DeclareCaption' before parsing." + (setq LaTeX-auto-caption-DeclareCaption nil)) + +(add-hook 'TeX-auto-prepare-hook #'LaTeX-caption-auto-prepare t) + +(defun LaTeX-caption-update-key-val-options () + "Update the buffer-local key-val options before offering them +in `caption'-completions." + (dolist (keyvals (LaTeX-caption-DeclareCaption-list)) + (let* ((key (cond ((string-equal (nth 1 keyvals) "LabelSeparator") + (downcase (substring (nth 1 keyvals) 0 8))) + (t (downcase (nth 1 keyvals))))) + (val (nth 2 keyvals)) + ;; (key-match (car (assoc key LaTeX-caption-key-val-options-local))) + (val-match (cdr (assoc key LaTeX-caption-key-val-options-local))) + (temp (copy-alist LaTeX-caption-key-val-options-local)) + (opts (assq-delete-all (car (assoc key temp)) temp))) + ;; For `\DeclareCaptionOption', only add the value + ;; (remember: key=^^^^^^, val="defined key") + (if (string-equal key "option") + (pushnew (list val) opts :test #'equal) + ;; For anything but `\DeclareCaptionOption', do the standard procedure + (if val-match + (pushnew (list key (delete-dups (apply 'append (list val) val-match))) + opts :test #'equal) + (pushnew (list key (list val)) opts :test #'equal))) + (setq LaTeX-caption-key-val-options-local (copy-alist opts))))) + +(defun LaTeX-arg-caption-command (&optional optional prompt) + "Insert caption-commands from `caption.sty'. If OPTIONAL is non-nil, +indicate `(Optional)' while reading key=val. PROMPT replaces the +standard one." + (LaTeX-caption-update-key-val-options) + (let ((opts (TeX-read-key-val optional + LaTeX-caption-key-val-options-local + prompt))) + (format "%s" opts))) + +;; In `LaTeX-caption-DeclareCaption-regexp', we match (0 1 2). When +;; adding a new `Name', we need something unique for `0'-match until +;; the next `C-c C-n'. We use a random number for this purpose which +;; will then disappear. +(defun LaTeX-arg-caption-DeclareCaption (format) + "Insert various `\\DeclareCaptionFORMAT' commands. FORMAT is +the suffix of the command." + (let ((name (TeX-read-string "Name: "))) + (LaTeX-add-caption-DeclareCaptions + `(,(number-to-string (random)) ,format ,name)) + (format "%s" name))) + +(TeX-add-style-hook + "caption" + (lambda () + + ;; Add caption to the parser. + (TeX-auto-add-regexp LaTeX-caption-DeclareCaption-regexp) + + ;; Activate the buffer-local version of key-vals. + (setq LaTeX-caption-key-val-options-local + (copy-alist LaTeX-caption-key-val-options)) + + ;; Caption commands: + (TeX-add-symbols + '("caption*" t) + + '("captionlistentry" + [TeX-arg-eval completing-read (TeX-argument-prompt t nil "Float type") + LaTeX-caption-supported-float-types] + t) + + '("captionof" + (TeX-arg-eval completing-read (TeX-argument-prompt nil nil "Float type") + LaTeX-caption-supported-float-types) + ["List entry"] t) + + '("captionof*" + (TeX-arg-eval completing-read (TeX-argument-prompt nil nil "Float type") + LaTeX-caption-supported-float-types) + ["List entry"] t) + + '("captionsetup" + [TeX-arg-eval completing-read (TeX-argument-prompt t nil "Float type") + LaTeX-caption-supported-float-types] + (TeX-arg-eval LaTeX-arg-caption-command)) + + '("captionsetup*" + [TeX-arg-eval completing-read (TeX-argument-prompt t nil "Float type") + LaTeX-caption-supported-float-types] + (TeX-arg-eval LaTeX-arg-caption-command)) + + '("clearcaptionsetup" + [TeX-arg-eval LaTeX-arg-caption-command t "Single key"] + (TeX-arg-eval completing-read (TeX-argument-prompt nil nil "Float type") + LaTeX-caption-supported-float-types)) + + '("clearcaptionsetup*" + [TeX-arg-eval LaTeX-arg-caption-command t "Single key"] + (TeX-arg-eval completing-read (TeX-argument-prompt nil nil "Float type") + LaTeX-caption-supported-float-types)) + + '("ContinuedFloat" 0) + + '("DeclareCaptionFont" + (TeX-arg-eval LaTeX-arg-caption-DeclareCaption "Font") t) + + '("DeclareCaptionFormat" + (TeX-arg-eval LaTeX-arg-caption-DeclareCaption "Format") t) + + '("DeclareCaptionFormat*" + (TeX-arg-eval LaTeX-arg-caption-DeclareCaption "Format") t) + + '("DeclareCaptionJustification" + (TeX-arg-eval LaTeX-arg-caption-DeclareCaption "Justification") t) + + '("DeclareCaptionLabelFormat" + (TeX-arg-eval LaTeX-arg-caption-DeclareCaption "LabelFormat") t) + + '("DeclareCaptionLabelSeparator" + (TeX-arg-eval LaTeX-arg-caption-DeclareCaption "LabelSeparator") t) + + '("DeclareCaptionLabelSeparator*" + (TeX-arg-eval LaTeX-arg-caption-DeclareCaption "LabelSeparator") t) + + '("DeclareCaptionListFormat" + (TeX-arg-eval LaTeX-arg-caption-DeclareCaption "ListFormat") t) + + '("DeclareCaptionOption" + (TeX-arg-eval LaTeX-arg-caption-DeclareCaption "Option") t) + + '("DeclareCaptionStyle" + (TeX-arg-eval LaTeX-arg-caption-DeclareCaption "Style") + [TeX-arg-eval LaTeX-arg-caption-command t "Additional options"] + (TeX-arg-eval LaTeX-arg-caption-command nil "Options")) + + '("DeclareCaptionTextFormat" + (TeX-arg-eval LaTeX-arg-caption-DeclareCaption "TextFormat") t) + + '("bothIfFirst" 2) + + '("bothIfSecond" 2)) + + ;; Fontification + (when (and (featurep 'font-latex) + (eq TeX-install-font-lock 'font-latex-setup)) + (font-latex-add-keywords '(("caption" "*[{") + ("captionlistentry" "[{") + ("captionof" "*[{")) + 'textual) + (font-latex-add-keywords '(("captionsetup" "*[{") + ("clearcaptionsetup" "*[{") + ("DeclareCaptionFont" "{{") + ("DeclareCaptionFormat" "*{{") + ("DeclareCaptionJustification" "{{") + ("DeclareCaptionLabelFormat" "{{") + ("DeclareCaptionLabelSeparator" "*{{") + ("DeclareCaptionListFormat" "{{") + ("DeclareCaptionOption" "{{") + ("DeclareCaptionStyle" "{[{") + ("DeclareCaptionTextFormat" "{{")) + 'function)) ) + LaTeX-dialect) + +(defun LaTeX-caption-package-options () + "Prompt for package options for the caption package." + (TeX-read-key-val t + (append '(("compatibility" ("true" "false"))) + '(("figureposition" ("top" "above" "bottom" "below"))) + '(("tableposition" ("top" "above" "bottom" "below"))) + LaTeX-caption-key-val-options))) + +;;; caption.el ends here -- 2.3.1