emacs/code/elpa/auctex-13.1.3/style/sidecap.el

132 lines
4.8 KiB
EmacsLisp

;;; sidecap.el --- AUCTeX style for `sidecap.sty' (v1.6f) -*- lexical-binding: t; -*-
;; Copyright (C) 2021, 2022 Free Software Foundation, Inc.
;; Author: Arash Esbati <arash@gnu.org>
;; Maintainer: auctex-devel@gnu.org
;; Created: 2021-12-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 `sidecap.sty' (v1.6f) from 2003/06/06.
;; `sidecap.sty' is part of TeXLive.
;;; Code:
(require 'tex)
(require 'latex)
(defun LaTeX-env-sidecap-float (environment)
"Create ENVIRONMENT with \\caption and \\label commands.
This function runs `LaTeX-env-figure' and inserts the first
optional argument 'relwidth' provided by environments of the
package sidecap."
(let ((relwidth (TeX-read-string
(TeX-argument-prompt t nil "Relative caption width")))
(sc-active-mark (and (TeX-active-mark)
(not (eq (mark) (point)))))
(p (point-marker))
s)
;; Run `LaTeX-env-figure' which does the major part of the job:
(LaTeX-env-figure environment)
;; Now save the position:
(setq s (point-marker))
;; Search backwards to see if an optional float-placement arg is
;; inserted; this would be the 2nd arg for sidecap environments:
(save-excursion
(re-search-backward (concat (regexp-quote TeX-esc)
"begin"
"[ \t]*"
TeX-grop
(regexp-quote environment)
"\\(" TeX-grcl "\\)"
"[ \t]*"
"\\("
(regexp-quote LaTeX-optop)
;; Float placement:
"\\([a-zA-Z!]*\\)"
(regexp-quote LaTeX-optcl)
"\\)?")
p t))
(cond (;; Insert the first optional arg at any rate if non-empty:
(and relwidth (not (string= relwidth "")))
(goto-char (match-end 1))
(insert LaTeX-optop relwidth LaTeX-optcl))
;; Insert a pair of empty brackets if relwidth is empty and
;; float-placement is given:
((and (or (null relwidth)
(string= relwidth ""))
(match-string 3))
(goto-char (match-beginning 2))
(insert LaTeX-optop LaTeX-optcl))
(t nil))
;; Go back to where we started if we have moved at all:
(unless (= s (point))
(goto-char s))
;; Insert a tabular stored in `LaTeX-default-tabular-environment':
(when (and (member environment '("SCtable" "SCtable*"))
(not sc-active-mark))
(LaTeX-environment-menu LaTeX-default-tabular-environment))
;; Clean up the markers:
(set-marker s nil)
(set-marker p nil)))
(TeX-add-style-hook
"sidecap"
(lambda ()
;; Add the environments provided by the package:
(LaTeX-add-environments
'("SCtable" LaTeX-env-sidecap-float)
'("SCtable*" LaTeX-env-sidecap-float)
'("SCfigure" LaTeX-env-sidecap-float)
'("SCfigure*" LaTeX-env-sidecap-float)
'("wide"))
;; Add the float environments to `LaTeX-label-alist':
(dolist (env '("SCfigure" "SCfigure*"))
(add-to-list 'LaTeX-label-alist `(,env . LaTeX-figure-label) t))
(dolist (env '("SCtable" "SCtable*"))
(add-to-list 'LaTeX-label-alist `(,env . LaTeX-table-label) t))
;; The next 2 can be set with '\renewcommand':
(TeX-add-symbols
"sidecaptionsep"
"sidecaptionrelwidth")
;; Run the style hook for 'ragged2e' if necessary:
(when (or (LaTeX-provided-package-options-member "sidecap" "raggedright")
(LaTeX-provided-package-options-member "sidecap" "raggedleft")
(LaTeX-provided-package-options-member "sidecap" "ragged"))
(TeX-run-style-hooks "ragged2e")))
TeX-dialect)
(defvar LaTeX-sidecap-package-options
'("outercaption" "innercaption"
"leftcaption" "rightcaption"
"wide"
"raggedright" "raggedleft" "ragged")
"Package options for the sidecap package.")
;;; sidecap.el ends here