diff options
author | mattkae <mattkae@protonmail.com> | 2022-05-17 07:07:37 -0400 |
---|---|---|
committer | mattkae <mattkae@protonmail.com> | 2022-05-17 07:07:37 -0400 |
commit | becff06c71d277647eda4378203d03ab36e141eb (patch) | |
tree | a1f73bba3676f34e0faf76764f5de963321f5576 /elpa/auctex-13.1.3/style/floatrow.el | |
parent | 3f4a0d5370ae6c34afe180df96add3b8522f4af1 (diff) |
Evil mode and latex support
Diffstat (limited to 'elpa/auctex-13.1.3/style/floatrow.el')
-rw-r--r-- | elpa/auctex-13.1.3/style/floatrow.el | 753 |
1 files changed, 753 insertions, 0 deletions
diff --git a/elpa/auctex-13.1.3/style/floatrow.el b/elpa/auctex-13.1.3/style/floatrow.el new file mode 100644 index 0000000..be8878f --- /dev/null +++ b/elpa/auctex-13.1.3/style/floatrow.el @@ -0,0 +1,753 @@ +;;; floatrow.el --- AUCTeX style for `floatrow.sty' (v0.3b) -*- lexical-binding: t; -*- + +;; Copyright (C) 2017--2021 Free Software Foundation, Inc. + +;; Author: Arash Esbati <arash@gnu.org> +;; Maintainer: auctex-devel@gnu.org +;; Created: 2016-11-11 +;; 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 `floatrow.sty' (v0.3b) from 2009/08/02. +;; `floatrow.sty' is part of TeXLive. +;; +;; `floatrow.sty' is a powerful package and the documentation long. +;; It is expected that this style is not feature complete. One +;; deliberate decision is that this style does not offer any package +;; options: Please use the command `\floatsetup' to set the options +;; you want. +;; +;; This style also alters the way AUCTeX inserts the environments +;; "table" and "figure" (cf. function `LaTeX-floatrow-env-init'). If +;; you want the original behavior, try `C-c C-e rawfigure' or `C-c C-e +;; rawtable' which include the environments incl. the macro \RawFloats +;; at the beginning of the environment (cf. function +;; `LaTeX-floatrow-env-figure-raw'). +;; +;; Another deliberate decision is the implementation of commands like +;; `\ffigbox' and `\ttabbox': When invoked with `C-c C-m ffigbox RET', +;; the final result will look like this with cursor being at *: +;; +;; \ffigbox{*}{% +;; \caption{query for a caption}% +;; \label{prefix:is-chosen-acc-to-current-environment}% +;; } +;; +;; This gives users the freedom to insert any command where point is. +;; The mandatory arguments are not part of the fontification as +;; commands like `\includegraphics' or `tabular' environments have their +;; own fontification. + +;;; Code: + +;; Needed for compiling `cl-pushnew': +(eval-when-compile + (require 'cl-lib)) + +;; Needed for compiling `LaTeX-check-insert-macro-default-style': +(require 'latex) + +;; Needed for auto-parsing: +(require 'tex) + +;; Silence the compiler: +(declare-function font-latex-add-keywords + "font-latex" + (keywords class)) + +(declare-function reftex-compile-variables + "reftex" + ()) + +(defvar LaTeX-floatrow-key-val-options + '(;; 3.1.1 Float Style + ("style" ("plain" "plaintop" "Plaintop" + "ruled" "Ruled" + "boxed" "Boxed" "BOXED" + "shadowbox" "Shadowbox" "SHADOWBOX" + "doublebox" "Doublebox" "DOUBLEBOX" + "wshadowbox" "Wshadowbox" "WSHADOWBOX")) + ;; 3.1.2 Font Settings + ("font" ("scriptsize" "footnotesize" "small" "normalsize" "large" + "Large" "normalfont" "up" "it" "sl" "sc" "md" "bf" + "rm" "sf" "tt")) + ("footfont" ("scriptsize" "footnotesize" "small" "normalsize" "large" + "Large" "normalfont" "up" "it" "sl" "sc" "md" "bf" + "rm" "sf" "tt")) + ;; 3.1.3 Position of Caption + ("capposition" ("top" "TOP" "bottom" "beside")) + ;; 3.1.4 Position of Beside Caption + ("capbesideposition" ("left" "right" "inside" "outside" + "top" "bottom" "center")) + ;; 3.1.5 Defining The Width of Beside Caption + ("capbesidewidth" ("none" "sidefil")) + ;; 3.1.6 Defining Width of Object + ("floatwidth" ("\\hsize" "\\textwidth" "\\columnwidth" "\\linewidth")) + ;; 3.1.7 Other Settings for Beside Captions + ("capbesideframe" ("yes" "no")) + ;; 3.1.8 Defining Float Foot Position (Legends and Footnotes) + ("footposition" ("default" "caption" "bottom")) + ;; 3.1.9 Vertical Alignment of Float Elements + ("heightadjust" ("all" "caption" "object" "none" "nocaption" "noobject")) + ("valign" ("t" "c" "b" "s")) + ;; 3.1.10 Facing Layout + ("facing" ("yes" "no")) + ;; 3.1.11 Object Settings + ("objectset" ("justified" "centering" "raggedright" "RaggedRight" "raggedleft")) + ;; 3.1.12 Defining Float Margins + ("margins" ("centering" "raggedright" "raggedleft" + "hangright" "hanginside" "hangoutside")) + ;; 3.1.13 Defining Float Separators + ("floatrowsep" ("columnsep" "quad" "qquad" "hfil" "hfill" "none")) + ("capbesidesep" ("columnsep" "quad" "qquad" "hfil" "hfill" "none")) + ;; 3.1.14 Defining Float Rules/Skips + ("precode" ("none" "thickrule" "rule" "lowrule" "captionskip")) + ("rowprecode" ("none" "thickrule" "rule" "lowrule" "captionskip")) + ("midcode" ("none" "thickrule" "rule" "lowrule" "captionskip")) + ("postcode" ("none" "thickrule" "rule" "lowrule" "captionskip")) + ("rowpostcode" ("none" "thickrule" "rule" "lowrule" "captionskip")) + ;; 3.1.15 Defining Float Frames + ("framestyle" ("fbox" "colorbox" "FRcolorbox" "corners" + "doublebox" "shadowbox" "wshadowbox")) + ("frameset") + ("framearound" ("none" "object" "all" "row" "none")) + ("framefit" ("yes" "no")) + ("rowfill" ("yes" "no")) + ;; 3.1.16 Settings for Colored Frames + ("colorframeset") + ("colorframecorners") + ;; 3.1.17 Defining Float Skips + ("captionskip") + ("footskip") + ;; 3.1.18 Defining Float Footnote Rule's Style + ("footnoterule" ("normal" "limited" "fullsize" "none")) + ;; 3.1.19 Managing Floats with [H] Placement Option + ("doublefloataswide" ("yes" "no")) + ("floatHaslist" ("yes" "no")) + ;; 7.2.1 Additions in The floatrow Package to longtable package + ("LTcapwidth" ("table" "contents"))) + "Key=value options for floatrow macros and environments.") + +(defun LaTeX-floatrow-key-val-options () + "Return an updated list of key=vals from floatrow package." + (append + (when (LaTeX-floatrow-DeclareNewOption-list) + (let ((vcode-keys '("precode" "rowprecode" "midcode" "postcode" "rowpostcode")) + (sep-keys '("floatrowsep" "capbesidesep")) + result) + (dolist (keyvals (LaTeX-floatrow-DeclareNewOption-list) result) + (let* ((key (cond ((string= (nth 1 keyvals) "FloatStyle") + "style") + ((string= (nth 1 keyvals) "FloatFont") + "font") + ((string= (nth 1 keyvals) "FloatVCode") + "precode") + ((string= (nth 1 keyvals) "ColorBox") + "colorframeset") + ((string= (nth 1 keyvals) "CBoxCorners") + "colorframecorners") + ((string= (nth 1 keyvals) "ObjectSet") + "objectset") + ((string= (nth 1 keyvals) "MarginSet") + "margins") + ((string= (nth 1 keyvals) "FloatSeparators") + "floatrowsep") + ((string= (nth 1 keyvals) "FloatFootnoterule") + "footnoterule") + (t nil))) + (val (nth 2 keyvals)) + (vals-predefined + (cadr (assoc key LaTeX-floatrow-key-val-options))) + (vals-parsed (cadr (assoc key result)))) + ;; Remove entry in `result' if there is one for the `key'. + ;; `precode' and `floatrowsep' are special here since they + ;; are placeholders for other keys (see above): + (cond ((string= key "precode") + (dolist (x vcode-keys) + (when (assoc x result) + (setq result (assq-delete-all (car (assoc x result)) result))))) + ((string= key "floatrowsep") + (dolist (x sep-keys) + (when (assoc x result) + (setq result (assq-delete-all (car (assoc x result)) result))))) + (t + (when (assoc key result) + (setq result (assq-delete-all (car (assoc key result)) result))))) + ;; Add the entrie to `result'. Again, watch for `precode' + ;; and `floatrowsep'. Also delete any dupes: + (cond ((string= key "precode") + (dolist (x vcode-keys) + (cl-pushnew (list x (TeX-delete-duplicate-strings + (append vals-parsed + vals-predefined + (list val)))) + result :test #'equal))) + ((string= key "floatrowsep") + (dolist (x sep-keys) + (cl-pushnew (list x (TeX-delete-duplicate-strings + (append vals-parsed + vals-predefined + (list val)))) + result :test #'equal))) + (t + (cl-pushnew (list key (TeX-delete-duplicate-strings + (append vals-parsed + vals-predefined + (list val)))) + result :test #'equal))))))) + LaTeX-floatrow-key-val-options)) + +(defvar LaTeX-floatrow-supported-float-types + '("figure" "table" ; Standard LaTeX + "widefigure" "widetable" "widefloat" ; Standard figure* & table* + "wrapfigure" "wraptable" "wrapfloat" ; wrapfig.sty + "rotfigure" "rottable" "rotfloat" ; rotating.sty + "widerotfigure" "widerottable" "widerotfloat" ; for 2-col & wide + "figurerow" "tablerow" "floatrow" ; inside floatrow env's + "capbesidefigure" "capbesidetable" ; floats with beside captions + "capbesidefloat" + "longtable" ; longtable.sty + "subfigure" "subtable" "sub") ; subcaption.sty + "List of float types supported by floatrow.sty.") + +;; Setup for \newfloatcommand +(TeX-auto-add-type "floatrow-newfloatcommand" "LaTeX") + +(defvar LaTeX-floatrow-newfloatcommand-regexp + '("\\\\newfloatcommand{\\([^}]+\\)}" 1 LaTeX-auto-floatrow-newfloatcommand) + "Matches the arguments of \"\\newfloatcommand\" from floatrow.sty.") + +;; Setup for various \Declare* macros: +(TeX-auto-add-type "floatrow-DeclareNewOption" "LaTeX") + +(defvar LaTeX-floatrow-DeclareNewOption-regexp + `(,(concat + "\\\\Declare" + "\\(" + (mapconcat #'identity + '("FloatStyle" ; 3.6.1 Float Style Option (style=) + "FloatFont" ; 3.6.2 Float Font Option (font=) + "FloatVCode" ; 3.6.3 Option for Float Rules/Skips (precode= etc.) + "ColorBox" ; 3.6.4 Settings for Colored Frame (colorframeset=) + "CBoxCorners" ; colorframecorners= + "ObjectSet" ; 3.6.5 Object Justification Option (objectset=) + "MarginSet" ; 3.6.6 Option for Float Box Alignment/Settings (margins=) + "FloatSeparators" ; 3.6.7 Float Separators Options (floatrowsep=, capbesidesep=) + "FloatFootnoterule") ; 3.6.8 Option for Footnote Rule's Style (footnoterule=) + "\\|") + "\\)" + "{\\([^}]+\\)}") + (0 1 2) LaTeX-auto-floatrow-DeclareNewOption) + "Matches the arguments of \"\\Declare*\" from floatrow.sty.") + +;; Setup for \newseparated(label|ref): +(TeX-auto-add-type "floatrow-newseparatedlabel-ref" "LaTeX") + +(defvar LaTeX-floatrow-newseparatedlabel-ref-regexp + `(,(concat + "\\\\newseparated" + "\\(label\\|ref\\)" + "{?" + "\\\\" + "\\([a-zA-Z]+\\)" + "}?") + (2 1) LaTeX-auto-floatrow-newseparatedlabel-ref) + "Matches the arguments \"\\newseparated(label|ref)\" command from floatrow.sty.") + +;; Setup for \DeclareNewFloatType: +(TeX-auto-add-type "floatrow-DeclareNewFloatType" "LaTeX") + +(defvar LaTeX-floatrow-DeclareNewFloatType-regexp + '("\\\\DeclareNewFloatType{\\([^}]+\\)}" + 1 LaTeX-auto-floatrow-DeclareNewFloatType) + "Matches the argument of \"\\DeclareNewFloatType\" command from floatrow.sty.") + +;; Plug them into the machinery. +(defun LaTeX-floatrow-auto-prepare () + "Clear various \"LaTeX-floatrow\" variables before parsing." + (setq LaTeX-auto-floatrow-newfloatcommand nil + LaTeX-auto-floatrow-DeclareNewOption nil + LaTeX-auto-floatrow-newseparatedlabel-ref nil + LaTeX-auto-floatrow-DeclareNewFloatType nil)) + +(defun LaTeX-floatrow-auto-cleanup () + "Process parsed results from floatrow package." + ;; Replace initially the way fig & tab env's are inserted: + (LaTeX-floatrow-env-init) + ;; + ;; Process new float commands like \ffigbox: + (when (LaTeX-floatrow-newfloatcommand-list) + (dolist (cmd (mapcar #'car (LaTeX-floatrow-newfloatcommand-list))) + (TeX-add-symbols `(,cmd LaTeX-floatrow-arg-floatbox)) + (when (and (featurep 'font-latex) + (eq TeX-install-font-lock 'font-latex-setup)) + (font-latex-add-keywords `((,cmd "[[[")) + 'textual)))) + ;; + ;; Process new label/ref commands: + (when (LaTeX-floatrow-newseparatedlabel-ref-list) + (let (floatrow-run-reftex-compile-vars) + (dolist (elt (LaTeX-floatrow-newseparatedlabel-ref-list)) + (let ((cmd (car elt)) + (type (cadr elt))) + (if (string= type "ref") + ;; More fun w/ referencing macros: + (TeX-add-symbols `(,cmd TeX-arg-ref)) + ;; Less fun w/ label defining macros. Add cmd to + ;; TeX-symbol-list: + (TeX-add-symbols `(,cmd TeX-arg-define-label)) + ;; For AUCTeX, parse the argument of the new macro and add + ;; it to `LaTeX-auto-label': + (TeX-auto-add-regexp + `(,(concat "\\\\" cmd "{\\([^\n\r%\\{}]+\\)}") 1 LaTeX-auto-label)) + ;; For RefTeX, append cmd to `reftex-label-regexps and set + ;; floatrow-run-reftex-compile-vars to t: + (when (and (boundp 'reftex-label-regexps) + (fboundp 'reftex-compile-variables) + (not (string-match + cmd + (mapconcat #'identity reftex-label-regexps "|")))) + (add-to-list (make-local-variable 'reftex-label-regexps) + (concat "\\\\" cmd "{\\(?1:[^}]*\\)}") t) + (setq floatrow-run-reftex-compile-vars t))) + ;; Fontify macros as reference: + (when (and (featurep 'font-latex) + (eq TeX-install-font-lock 'font-latex-setup)) + (font-latex-add-keywords `((,cmd "{")) + 'reference)))) + ;; Run `reftex-compile-variables' if needed only once: + (when floatrow-run-reftex-compile-vars + (reftex-compile-variables)))) + ;; + ;; Process new floattypes: + (when (LaTeX-floatrow-DeclareNewFloatType-list) + (LaTeX-floatrow-arg-declare-new-floattype nil t)) + ;; + ;; Add elements from `LaTeX-floatrow-supported-float-types' to + ;; `LaTeX-caption-supported-float-types': + (when (boundp 'LaTeX-caption-supported-float-types) + (make-local-variable 'LaTeX-caption-supported-float-types) + (dolist (float LaTeX-floatrow-supported-float-types) + (add-to-list 'LaTeX-caption-supported-float-types float t))) ) + +(add-hook 'TeX-auto-prepare-hook #'LaTeX-floatrow-auto-prepare t) +(add-hook 'TeX-auto-cleanup-hook #'LaTeX-floatrow-auto-cleanup t) +(add-hook 'TeX-update-style-hook #'TeX-auto-parse t) + +(defun LaTeX-floatrow-arg-floatbox (optional) + "Query and insert arguments of float box commands from floatrow.sty. +If OPTIONAL is non-nil, indicate optional argument during query." + ;; Query for the optional arguments; ask for "vertpos" only if + ;; "height" is given. let-bind `TeX-arg-*-brace' for + ;; `TeX-argument-insert': + (let* ((TeX-arg-opening-brace "[") + (TeX-arg-closing-brace "]") + (TeX-last-optional-rejected nil) + (width (LaTeX-check-insert-macro-default-style + (completing-read + (TeX-argument-prompt t nil "Width") + (mapcar (lambda (x) (concat TeX-esc (car x))) + (LaTeX-length-list))))) + (TeX-last-optional-rejected (or (not width) + (and width (string= width "")))) + (height (LaTeX-check-insert-macro-default-style + (completing-read + (TeX-argument-prompt t nil "Height") + (mapcar (lambda (x) (concat TeX-esc (car x))) + (LaTeX-length-list))))) + (TeX-last-optional-rejected (or (not height) + (and height (string= height "")))) + (vertpos (LaTeX-check-insert-macro-default-style + (if (string= height "") + "" + (completing-read + (TeX-argument-prompt t nil "Vertical alignment") + '("t" "c" "b" "s")))))) + (and width (TeX-argument-insert width t)) + ;; Insert an extra pair of brackets if only `height' is given, + ;; otherwise it will become `width' + (when (and width (string= width "") + height (not (string= height ""))) + (insert "[]")) + (and height (TeX-argument-insert height t)) + (and vertpos (TeX-argument-insert vertpos t))) + ;; Now query for the (short-)caption. Also check for the + ;; float-type; if we're inside (sub)?floatrow*?, then check for the + ;; next outer environment: + (let* ((currenv (if (string-match "floatrow\\*?\\_>" (LaTeX-current-environment)) + (LaTeX-current-environment 2) + (LaTeX-current-environment))) + (caption (TeX-read-string + (TeX-argument-prompt optional nil "Caption"))) + (short-caption + (when (>= (length caption) LaTeX-short-caption-prompt-length) + (TeX-read-string + (TeX-argument-prompt t nil "Short caption"))))) + (indent-according-to-mode) + ;; The final result will look like this with * being point: + ;; \ffigbox{*}{% + ;; \caption{text}% + ;; \label{fig:foo}% + ;; } + (insert TeX-grop) + (save-excursion + ;; We are inside the 1. mandatory arg: Save the pos & insert `}{': + (insert TeX-grcl TeX-grop) + (if (and caption (not (string= caption ""))) + (progn + ;; If caption, move to EOL, delete any spaces and hide the line end + (end-of-line) + (delete-horizontal-space) + (insert "%") + ;; Add a newline and the caption + (newline-and-indent) + (insert (LaTeX-compose-caption-macro caption short-caption)) + ;; If we have a caption, then we probably also want a + ;; label. Hide EOL end and proceed to enter a label + (insert "%") + (newline-and-indent) + (when (LaTeX-label currenv 'environment) + ;; Move point to end of line and hide EOL + (end-of-line) + (delete-horizontal-space) + (insert "%") + (newline-and-indent)) + ;; Now close the group + (insert TeX-grcl) + (indent-according-to-mode) + (end-of-line)) + ;; Otherwise, only insert a } + (insert TeX-grcl))))) + +(defun LaTeX-floatrow-env-init () + "Replace AUCTeX entries in the variable `LaTeX-environment-list'. +After loading the style hook floatrow.el, delete the entries for +figure*? and table*? from variable `LaTeX-environment-list' and +replace them with the ones offered by the style. Original +entries are available under \"rawfigure*?\" and \"rawtable*?\"." + (LaTeX-environment-list) + (dolist (env '("figure" "figure*" "table" "table*")) + (setq LaTeX-environment-list + (assq-delete-all (car (assoc env LaTeX-environment-list)) + LaTeX-environment-list)) + (LaTeX-add-environments `(,env LaTeX-floatrow-env-figure) + `(,(concat "raw" env) LaTeX-floatrow-env-figure-raw)))) + +(defun LaTeX-floatrow-env-figure (environment) + "Create floating ENVIRONMENT suitable for floatrow macros." + (let ((float (and LaTeX-float + (TeX-read-string + (TeX-argument-prompt t nil "Float position") + LaTeX-float)))) + (LaTeX-insert-environment environment + (unless (zerop (length float)) + (concat LaTeX-optop float LaTeX-optcl))))) + +(defun LaTeX-floatrow-env-figure-raw (env) + "Create raw floating ENV with floatrow.sty. +Also insert the macro \"\\RawFloats\" when finished with user +queries." + (let ((environment (replace-regexp-in-string "raw" "" env))) + (LaTeX-env-figure environment) + (save-excursion + ;; `LaTeX-find-matching-begin' will not work for us as we don't + ;; know how user answers queries from AUCTeX, hence we search + ;; back for `environment': + (re-search-backward (concat "\\\\begin{" environment "}") nil t) + (end-of-line) + (LaTeX-newline) + (indent-according-to-mode) + (insert TeX-esc "RawFloats")))) + +(defun LaTeX-floatrow-arg-declare-new-options (optional prompt key) + "Query and insert user-defined values to keys provided by floatrow.sty. +If OPTIONAL is non-nil, ask for an optional argument and insert +it in square brackets. PROMPT replaces the standard one. KEY is +a string and corresponds to first parsed element in +`LaTeX-floatrow-DeclareNewOption-regexp'." + (let ((val (TeX-read-string + (TeX-argument-prompt optional prompt "New value option")))) + (LaTeX-add-floatrow-DeclareNewOptions + (list (concat TeX-esc "Declare" key TeX-grop val TeX-grcl) + key val)) + (TeX-argument-insert val optional) + (TeX-argument-insert + (TeX-read-key-val optional (LaTeX-floatrow-key-val-options)) optional))) + +(defun LaTeX-floatrow-arg-newseparatedlabel/ref (optional type) + "Query and insert user defined label and reference macros from floatrow.sty. +If OPTIONAL is non-nil, insert the argument in brackets. TYPE is +the string \"label\" or \"ref\"." + (let ((cmd (TeX-read-string + (if (string= type "label") + (TeX-argument-prompt optional nil "Label command: \\" t) + (TeX-argument-prompt optional nil "Reference command: \\" t))))) + (LaTeX-add-floatrow-newseparatedlabel-refs (list cmd type)) + (if (string= type "label") + (TeX-add-symbols `(,cmd TeX-arg-define-label)) + (TeX-add-symbols `(,cmd TeX-arg-ref))) + (TeX-argument-insert cmd optional TeX-esc))) + +(defun LaTeX-floatrow-arg-declare-new-floattype (optional &optional cleanup) + "Query and insert the first argument of \"DeclareNewFloatType\" macro. +If OPTIONAL is non-nil, insert the argument in brackets. If +CLEANUP in non-nil, skip the query and insert process as we are +inside the function `LaTeX-floatrow-auto-cleanup' and process +only the parsed items." + (let ((type (if cleanup + (mapcar #'car (LaTeX-floatrow-DeclareNewFloatType-list)) + (list (TeX-read-string + (TeX-argument-prompt optional nil "Environment type")))))) + ;; If not inside `LaTeX-floatrow-auto-cleanup', add user input to + ;; list of new floats and insert it + (unless cleanup + (LaTeX-add-floatrow-DeclareNewFloatTypes (car type)) + (TeX-argument-insert (car type) optional)) + ;; Make the next variables buffer local + (make-local-variable 'LaTeX-floatrow-supported-float-types) + (when (boundp 'LaTeX-caption-supported-float-types) + (make-local-variable 'LaTeX-caption-supported-float-types)) + ;; Process new float type(s): a) add type to list of known + ;; environments incl. "raw" version b) add different flavors of + ;; type to `LaTeX-floatrow-supported-float-types' c) check if + ;; `LaTeX-caption-supported-float-types' is bound and add + ;; different flavors of type to it as well + (dolist (elt type) + (LaTeX-add-environments `(,elt LaTeX-floatrow-env-figure) + `(,(concat "raw" elt) LaTeX-floatrow-env-figure-raw)) + (add-to-list 'LaTeX-floatrow-supported-float-types elt t) + (add-to-list 'LaTeX-floatrow-supported-float-types (concat "wide" elt) t) + (add-to-list 'LaTeX-floatrow-supported-float-types (concat elt "row") t) + (add-to-list 'LaTeX-floatrow-supported-float-types (concat "capbeside" elt) t) + (when (boundp 'LaTeX-caption-supported-float-types) + (add-to-list 'LaTeX-caption-supported-float-types elt t) + (add-to-list 'LaTeX-caption-supported-float-types (concat "wide" elt) t) + (add-to-list 'LaTeX-caption-supported-float-types (concat elt "row") t) + (add-to-list 'LaTeX-caption-supported-float-types (concat "capbeside" elt) t))))) + +(TeX-add-style-hook + "floatrow" + (lambda () + + ;; Add floatrow to the parser + (TeX-auto-add-regexp LaTeX-floatrow-DeclareNewOption-regexp) + (TeX-auto-add-regexp LaTeX-floatrow-newfloatcommand-regexp) + (TeX-auto-add-regexp LaTeX-floatrow-newseparatedlabel-ref-regexp) + (TeX-auto-add-regexp LaTeX-floatrow-DeclareNewFloatType-regexp) + + ;; Add pre-defined float commands: + (LaTeX-add-floatrow-newfloatcommands + "ffigbox" "fcapside" "ttabbox") + + ;; Macros + (TeX-add-symbols + ;; 2.1 The \floatbox Macro + ;; \floatbox[<preamble>]{<captype>}[<width>][<height>][<vert pos>]{<caption>}{<object>} + '("floatbox" + [TeX-arg-eval completing-read + (TeX-argument-prompt t nil "Preamble") + '("\\capbeside" "\\nocapbeside" "\\captop")] + (TeX-arg-eval completing-read + (TeX-argument-prompt nil nil "Float type") + LaTeX-floatrow-supported-float-types) + LaTeX-floatrow-arg-floatbox) + + ;; 2.2 Creation of Personal Commands for Float Boxes + '("newfloatcommand" + (TeX-arg-eval + (lambda () + (let ((cmd (TeX-read-string + (TeX-argument-prompt nil nil "Command")))) + (LaTeX-add-floatrow-newfloatcommands cmd) + (TeX-add-symbols + `(,cmd LaTeX-floatrow-arg-floatbox)) + (format "%s" cmd)))) + (TeX-arg-eval completing-read + (TeX-argument-prompt nil nil "Float type") + '("figure" "table")) + [ 2 ]) + + '("renewfloatcommand" + (TeX-arg-eval completing-read + (TeX-argument-prompt nil nil "Command") + (LaTeX-floatrow-newfloatcommand-list)) + (TeX-arg-eval completing-read + (TeX-argument-prompt nil nil "Float type") + '("figure" "table")) + [ 2 ]) + + + ;; 2.2.2 Predefined Float Box Commands + '("ffigbox" + LaTeX-floatrow-arg-floatbox) + + '("ttabbox" + LaTeX-floatrow-arg-floatbox) + + '("fcapside" + LaTeX-floatrow-arg-floatbox) + + ;; 2.3.1 Mixed Row + '("CenterFloatBoxes" 0) + '("TopFloatBoxes" 0) + '("BottomFloatBoxes" 0) + '("PlainFloatBoxes" 0) + '("buildFBBOX" 2) + + ;; 3 Float Layout Settings + '("floatsetup" + [TeX-arg-eval completing-read + (TeX-argument-prompt t nil "Float type") + LaTeX-floatrow-supported-float-types] + (TeX-arg-key-val (LaTeX-floatrow-key-val-options))) + + ;; 3.2 Settings for Current Float Environment + '("thisfloatsetup" + (TeX-arg-key-val (LaTeX-floatrow-key-val-options))) + + ;; 3.3 Clearing of Settings for Current Float Type + '("clearfloatsetup" + (TeX-arg-eval completing-read + (TeX-argument-prompt nil nil "Float type") + LaTeX-floatrow-supported-float-types)) + + ;; 3.4 Temporary Clearing of All Float Settings + '("killfloatstyle" 0) + + ;; 3.6.1 Float Style Option (style=) + '("DeclareFloatStyle" + (LaTeX-floatrow-arg-declare-new-options "New style option" + "FloatStyle")) + + ;; 3.6.2 Float Font Option (font=) + '("DeclareFloatFont" + (LaTeX-floatrow-arg-declare-new-options "New font option" + "FloatFont")) + + ;; 3.6.3 Option for Float Rules/Skips (precode= etc.) + '("DeclareFloatVCode" + (LaTeX-floatrow-arg-declare-new-options "New rules/skip option" + "FloatVCode")) + + ;; 3.6.4 Settings for Colored Frame (colorframeset=) + '("DeclareColorBox" + (LaTeX-floatrow-arg-declare-new-options "New colored frame option" + "ColorBox")) + + ;; (colorframecorners=) + '("DeclareCBoxCorners" + (LaTeX-floatrow-arg-declare-new-options "New colored corner option" + "CBoxCorners")) + + ;; 3.6.5 Object Justification Option (objectset=) + '("DeclareObjectSet" + (LaTeX-floatrow-arg-declare-new-options "New object justification" + "ObjectSet")) + + ;; 3.6.6 Option for Float Box Alignment/Settings (margins=) + '("DeclareMarginSet" + (LaTeX-floatrow-arg-declare-new-options "New alignment option" + "MarginSet")) + + '("setfloatmargins" 2) + '("setfloatmargins*" 2) + '("floatfacing" 2) + '("floatfacing*" 2) + '("floatboxmargins" 2) + '("floatrowmargins" 2) + '("floatcapbesidemargins" 2) + + ;; 3.6.7 Float Separators Options (floatrowsep=, capbesidesep=) + '("DeclareFloatSeparators" + (LaTeX-floatrow-arg-declare-new-options "New separator option" + "FloatSeparators")) + + ;; 3.6.8 Option for Footnote Rule's Style (footnoterule=) + '("DeclareFloatFootnoterule" + (LaTeX-floatrow-arg-declare-new-options "New footnote rule option" + "FloatFootnoterule")) + + ;; 4 Creation of New Float Types + '("DeclareNewFloatType" + (LaTeX-floatrow-arg-declare-new-floattype) + (TeX-arg-key-val (("placement" ("tbp" "t" "b" "p")) + ("name") + ("fileext") + ("within" ("chapter" "section" "subsection")) + ("relatedcapstyle" ("yes" "no"))))) + + ;; 6.2 Support of The Label-Sublabel References + '("newseparatedlabel" + (LaTeX-floatrow-arg-newseparatedlabel/ref "label") 2) + + '("newseparatedref" + (LaTeX-floatrow-arg-newseparatedlabel/ref "ref") t) + + '("makelabelseparator" t) ) ;; terminate TeX-add-symbols + + ;; Environments + (LaTeX-add-environments + ;; 2.3 Building Float Row + '("floatrow" [ "Number of beside floats" ]) + + ;; 6.1 Managing of Float Parts With the subfloatrow Environment + '("subfloatrow" [ "Number of beside floats" ]) + '("subfloatrow*" [ "Number of beside floats" ])) + + ;; 2.1.1 Float Box Width Equals to The Width of Object Contents + (LaTeX-add-lengths "FBwidth" "FBheight" "Xhsize") + + ;; Fontification + (when (and (featurep 'font-latex) + (eq TeX-install-font-lock 'font-latex-setup)) + (font-latex-add-keywords '(("floatbox" "[{[[[") + ("ffigbox" "[[[") + ("ttabbox" "[[[") + ("fcapside" "[[[")) + 'textual) + (font-latex-add-keywords '(("newfloatcommand" "{{[[") + ("renewfloatcommand" "{{[[") + ("buildFBBOX" "{{") + ("floatsetup" "[{") + ("thisfloatsetup" "{") + ("clearfloatsetup" "{") + ("killfloatstyle" "") + ("DeclareFloatStyle" "{{") + ("DeclareFloatFont" "{{") + ("DeclareFloatVCode" "{{") + ("DeclareColorBox" "{{") + ("DeclareCBoxCorners" "{{") + ("DeclareObjectSet" "{{") + ("DeclareMarginSet" "{{") + ("DeclareFloatSeparators" "{{") + ("DeclareFloatFootnoterule" "{{") + ("newseparatedlabel" "{{{") + ("newseparatedref" "{{") + ("makelabelseparator" "{") + ("DeclareNewFloatType" "{{") + ("RawFloats" "")) + 'function))) + TeX-dialect) + +(defvar LaTeX-floatrow-package-options nil + "Prompt for package options for the floatrow package.") + +;;; floatrow.el ends here |