diff options
Diffstat (limited to 'elpa/auctex-13.1.3/style/beamer.el')
-rw-r--r-- | elpa/auctex-13.1.3/style/beamer.el | 381 |
1 files changed, 381 insertions, 0 deletions
diff --git a/elpa/auctex-13.1.3/style/beamer.el b/elpa/auctex-13.1.3/style/beamer.el new file mode 100644 index 0000000..589a26a --- /dev/null +++ b/elpa/auctex-13.1.3/style/beamer.el @@ -0,0 +1,381 @@ +;;; beamer.el --- AUCTeX style for the latex-beamer class -*- lexical-binding: t; -*- + +;; Copyright (C) 2003-2021 Free Software Foundation, Inc. + +;; Author: Thomas Baumann <thomas.baumann@ch.tum.de> +;; Created: 2003-12-20 +;; 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 the latex-beamer class. + +;;; Code: + +(require 'tex) +(require 'latex) + +;; Silence the compiler: +(declare-function font-latex-add-keywords + "font-latex" + (keywords class)) + +(defun LaTeX-beamer-after-insert-env (env start _end) + "Do beamer-specific stuff after the insertion of an environment." + ;; Add `fragile' as an optional argument to the frame environment if + ;; a verbatim environment is inserted. + (when (and (TeX-member env (LaTeX-verbatim-environments) #'string-equal) + (save-excursion + (goto-char start) + (string-equal (LaTeX-current-environment) "frame"))) + (save-excursion + (when (re-search-backward "\\\\begin[ \t]*{frame}" nil t) + (let ((end-of-begin (match-end 0))) + (goto-char end-of-begin) + (while (forward-comment 1)) + (if (eq (char-after) (string-to-char LaTeX-optop)) + (progn + (forward-char) + (insert "fragile") + (unless (looking-at (concat "[ \t]*" LaTeX-optcl)) + (insert ","))) + (goto-char end-of-begin) + (insert "[fragile]"))))))) + +(defvar LaTeX-beamer-frametitle-history nil + "History of frame titles in beamer.") + +(TeX-add-style-hook + "beamer" + (lambda () + (add-hook 'LaTeX-after-insert-env-hook #'LaTeX-beamer-after-insert-env nil t) + + (TeX-run-style-hooks "amsmath" "amssymb" "amsthm" "color" "geometry" + "hyperref" "inputenc" "translator" "xcolor") + + (unless LaTeX-beamer-section-labels-flag + (make-local-variable 'LaTeX-section-hook) + (setq LaTeX-section-hook + '(LaTeX-section-heading + LaTeX-section-title + LaTeX-section-section))) + + (setq LaTeX-item-list + (append '(("itemize" . LaTeX-item-beamer) + ("enumerate" . LaTeX-item-beamer)) + LaTeX-item-list)) + + (setq LaTeX-default-document-environment "frame") + + (LaTeX-paragraph-commands-add-locally "frametitle") + + (TeX-add-symbols + '("alert" [ TeX-arg-beamer-overlay-spec ] 1) + '("alt" [ TeX-arg-beamer-overlay-spec ] 2) + '("beamerbutton" 1) + '("beamergotobutton" 1) + '("beamerreturnbutton" 1) + '("beamerskipbutton" 1) + '("frame" TeX-arg-beamer-frametitle) + '("frametitle" + (TeX-arg-eval TeX-read-string "Title: " nil 'LaTeX-beamer-frametitle-history)) + '("hyperlink" [ TeX-arg-beamer-overlay-spec ] 2) + '("hyperlinkslideprev" [ TeX-arg-beamer-overlay-spec ] 1) + '("hyperlinkslidenext" [ TeX-arg-beamer-overlay-spec ] 1) + '("hyperlinkframestart" [ TeX-arg-beamer-overlay-spec ] 1) + '("hyperlinkframeend" [ TeX-arg-beamer-overlay-spec ] 1) + '("hyperlinkframestartnext" [ TeX-arg-beamer-overlay-spec ] 1) + '("hyperlinkframeendprev" [ TeX-arg-beamer-overlay-spec ] 1) + '("hyperlinkpresentationstart" [ TeX-arg-beamer-overlay-spec ] 1) + '("hyperlinkpresentationend" [ TeX-arg-beamer-overlay-spec ] 1) + '("hyperlinkappendixstart" [ TeX-arg-beamer-overlay-spec ] 1) + '("hyperlinkappendixend" [ TeX-arg-beamer-overlay-spec ] 1) + '("hyperlinkdocumentstart" [ TeX-arg-beamer-overlay-spec ] 1) + '("hyperlinkdocumentend" [ TeX-arg-beamer-overlay-spec ] 1) + '("hypertarget" [ TeX-arg-beamer-overlay-spec ] 2) + '("institute" 1) + '("invisible" [ TeX-arg-beamer-overlay-spec ] 1) + '("label" [ TeX-arg-beamer-overlay-spec ] 1) + '("logo" 1) + '("note" TeX-arg-beamer-note 1) + '("only" [ TeX-arg-beamer-overlay-spec ] 1) + '("onslide" [ TeX-arg-beamer-overlay-spec ]) + '("partpage") + '("pause" ["Slide number"]) + '("structure" [ TeX-arg-beamer-overlay-spec ] 1) + '("temporal" [ TeX-arg-beamer-overlay-spec ] 3) + '("titlepage") + '("titlegraphic" 1) + '("uncover" [ TeX-arg-beamer-overlay-spec ] 1) + '("usetheme" LaTeX-arg-beamer-theme) + '("useinnertheme" LaTeX-arg-beamer-inner-theme) + '("useoutertheme" LaTeX-arg-beamer-outer-theme) + '("usecolortheme" LaTeX-arg-beamer-color-theme) + '("usefonttheme" LaTeX-arg-beamer-font-theme) + '("usetheme" LaTeX-arg-beamer-theme) + '("visible" [ TeX-arg-beamer-overlay-spec ] 1)) + + (LaTeX-add-environments + '("actionenv") + '("alertblock" 1) + '("beamerboxesrounded" 1) + '("block" (lambda (env &rest ignore) + (LaTeX-insert-environment + env (format "{%s}" (TeX-read-string "Title: "))))) + '("column" "Width") + "columns" + "columnsonlytextwidth" + '("exampleblock" 1) + '("frame" (lambda (env &rest ignore) + (let ((title (TeX-read-string "(Optional) Title: " nil + 'LaTeX-beamer-frametitle-history))) + (LaTeX-insert-environment env) + (unless (zerop (length title)) + (save-excursion + (LaTeX-find-matching-begin) + (end-of-line) + (LaTeX-newline) + ;; Indent the next macro insertion and don't + ;; rely on the fill-function to do it: + (indent-according-to-mode) + (insert (format "\\frametitle{%s}" title)) + ;; This works because \frametitle is a + ;; paragraph command. + (when auto-fill-function + (backward-char) + (LaTeX-fill-paragraph))))))) + '("onlyenv" (lambda (env &rest ignore) + (LaTeX-insert-environment + env + (let ((overlay (TeX-read-string "(Optional) Overlay: "))) + (unless (zerop (length overlay)) + (format "<%s>" overlay)))))) + '("overlayarea" "Area width" "Area height") + '("overprint" (lambda (env &rest ignore) + (LaTeX-insert-environment + env + (let ((width (TeX-read-string "(Optional) Area width: "))) + (unless (zerop (length width)) + (format "[%s]" width)))))) + "semiverbatim") + + (LaTeX-largest-level-set "section") + (LaTeX-add-counters "lecture" "part" "section" "subsection" "subsubsection" + "subsectionslide" "framenumber" "figure" "table" + "beamerpauses") + (LaTeX-add-pagestyles "navigation") + (add-to-list (make-local-variable 'LaTeX-indent-environment-list) + '("semiverbatim" current-indentation) t) + (add-to-list 'LaTeX-verbatim-environments-local "semiverbatim") + + ;; Fontification + (when (and (featurep 'font-latex) + (eq TeX-install-font-lock 'font-latex-setup)) + (font-latex-add-keywords '(("title" "[{") + ("subtitle" "[{") + ("author" "[{") + ("date" "[{") + ("frametitle" "<[{")) 'slide-title))) + TeX-dialect) + +(defun TeX-arg-beamer-overlay-spec (optional &optional prompt) + "Prompt for overlay specification. +If OPTIONAL is non-nil, insert the specification only if +non-empty and enclosed in \"<>\". PROMPT replaces the standard +one." + (let ((TeX-arg-opening-brace "<") + (TeX-arg-closing-brace ">")) + (TeX-argument-insert + (TeX-read-string + (TeX-argument-prompt optional prompt "Overlay")) + optional) + (indent-according-to-mode))) + +(defun TeX-arg-beamer-frametitle (_optional &optional _prompt) + "Prompt for the frametitle." + (let ((title (TeX-read-string "Title: " nil 'LaTeX-beamer-frametitle-history))) + (if (not (zerop (length title))) + (insert TeX-grop TeX-esc "frametitle" TeX-grop + title TeX-grcl TeX-grcl) + (insert TeX-grop TeX-grcl)))) + +(defun LaTeX-item-beamer () + "Insert a new item with an optional overlay argument. You +can turn off the prompt for the overlay argument by setting +`LaTeX-beamer-item-overlay-flag' to nil. Calling the function +with a prefix argument prompts for the overlay specification +unconditionally." + (if (listp current-prefix-arg) + (setq current-prefix-arg (car current-prefix-arg)) + current-prefix-arg) + (TeX-insert-macro "item") + (delete-horizontal-space) + (if (or current-prefix-arg LaTeX-beamer-item-overlay-flag) + (TeX-arg-beamer-overlay-spec 0)) + (insert " ") + (indent-according-to-mode)) + +(defun TeX-arg-beamer-note (_optional &optional _prompt) + "Prompt for overlay specification and optional argument." + (let ((overlay (TeX-read-string "(Optional) Overlay: ")) + (options (TeX-read-string "(Optional) Options: "))) + (unless (zerop (length overlay)) + (insert "<" overlay ">")) + (unless (zerop (length options)) + (insert "[" options "]")) + (indent-according-to-mode))) + +(defun LaTeX-beamer-search-themes (&optional regexp extensions length) + "Search for beamer themes matching REGEXP with EXTENSIONS. +The function removes the first LENGTH characters and the +extension of the file and returns a list of strings. LENGTH may +also be a string. Then the length of the string is used." + (let* ((match (or regexp "^beamertheme[A-Z]")) + (exts (or extensions '("tex" "sty"))) + (chars (cond ((integerp length) + length) + ((stringp length) + (string-width length)) + ;; Try some DWIM magic... + ((and (not length) + (string-match "beamer[A-Za-z0-9]*theme" match)) + (- (match-end 0) (match-beginning 0))) + (t (error "Invalid length: `%s'" length))))) + ;; (message "match=`%s' chars=`%s'" match chars) + (TeX-delete-duplicate-strings + (delete nil + (mapcar + (lambda (file) + (let ((case-fold-search nil)) + (and (numberp (string-match match file)) + (substring file chars)))) + (TeX-search-files nil exts t t)))))) + +(defun LaTeX-arg-beamer-theme (&rest _ignore) + "Prompt for beamer theme with completion." + (TeX-argument-insert + (completing-read + (TeX-argument-prompt nil nil "Theme") + (mapcar #'list + (cond ((eq LaTeX-beamer-themes 'local) + (set (make-local-variable 'LaTeX-beamer-themes) + (LaTeX-beamer-search-themes))) + ((functionp LaTeX-beamer-themes) + (funcall LaTeX-beamer-themes)) + ((listp LaTeX-beamer-themes) + LaTeX-beamer-themes) + (t (error + "`LaTeX-beamer-themes' should be a list: `%s'" + LaTeX-beamer-themes)))) + nil nil nil) + t)) + +(defun LaTeX-arg-beamer-inner-theme (&rest _ignore) + "Prompt for beamer inner theme with completion." + (TeX-argument-insert + (completing-read + (TeX-argument-prompt nil nil "Theme") + (mapcar #'list + (cond ((eq LaTeX-beamer-inner-themes 'local) + (set (make-local-variable 'LaTeX-beamer-inner-themes) + (LaTeX-beamer-search-themes "^beamerinnertheme"))) + ((functionp LaTeX-beamer-inner-themes) + (funcall LaTeX-beamer-inner-themes)) + ((listp LaTeX-beamer-inner-themes) + LaTeX-beamer-inner-themes) + (t (error + "`LaTeX-beamer-inner-themes' should be a list: `%s'" + LaTeX-beamer-inner-themes)))) + nil nil nil) + t)) + +(defun LaTeX-arg-beamer-outer-theme (&rest _ignore) + "Prompt for beamer outer theme with completion." + (TeX-argument-insert + (completing-read + (TeX-argument-prompt nil nil "Theme") + (mapcar #'list + (cond ((eq LaTeX-beamer-outer-themes 'local) + (set (make-local-variable 'LaTeX-beamer-outer-themes) + (LaTeX-beamer-search-themes "^beameroutertheme"))) + ((functionp LaTeX-beamer-outer-themes) + (funcall LaTeX-beamer-outer-themes)) + ((listp LaTeX-beamer-outer-themes) + LaTeX-beamer-outer-themes) + (t (error + "`LaTeX-beamer-outer-themes' should be a list: `%s'" + LaTeX-beamer-outer-themes)))) + nil nil nil) + t)) + +(defun LaTeX-arg-beamer-color-theme (&rest _ignore) + "Prompt for beamer color theme with completion." + (TeX-argument-insert + (completing-read + (TeX-argument-prompt nil nil "Theme") + (mapcar #'list + (cond ((eq LaTeX-beamer-color-themes 'local) + (set (make-local-variable 'LaTeX-beamer-color-themes) + (LaTeX-beamer-search-themes "^beamercolortheme"))) + ((functionp LaTeX-beamer-color-themes) + (funcall LaTeX-beamer-color-themes)) + ((listp LaTeX-beamer-color-themes) + LaTeX-beamer-color-themes) + (t (error + "`LaTeX-beamer-color-themes' should be a list: `%s'" + LaTeX-beamer-color-themes)))) + nil nil nil) + t)) + +(defun LaTeX-arg-beamer-font-theme (&rest _ignore) + "Prompt for beamer font theme with completion." + (TeX-argument-insert + (completing-read + (TeX-argument-prompt nil nil "Theme") + (mapcar #'list + (cond ((eq LaTeX-beamer-font-themes 'local) + (set (make-local-variable 'LaTeX-beamer-font-themes) + (LaTeX-beamer-search-themes "^beamerfonttheme"))) + ((functionp LaTeX-beamer-font-themes) + (funcall LaTeX-beamer-font-themes)) + ((listp LaTeX-beamer-font-themes) + LaTeX-beamer-font-themes) + (t (error + "`LaTeX-beamer-font-themes' should be a list: `%s'" + LaTeX-beamer-font-themes)))) + nil nil nil) + t)) + +(defun LaTeX-beamer-class-options () + "Read the beamer class options from the user." + (TeX-load-style "hyperref") + (TeX-read-key-val t '(("usepdftitle" ("false")) ("envcountsect") + ("notheorems") ("noamsthm") ("compress") ("t") ("c") + ("leqno") ("fleqn") ("handout") ("trans") ("pdftex") + ("nativepdf") ("pdfmark") ("dvips") ("dviwindo") + ("dvipsone") ("vtex") ("ps2pdf") ("ignorenonframetext") + ("noamssymb") ("bigger") ("smaller") ("8pt") ("9pt") + ("10pt") ("11pt") ("12pt") ("14pt") ("17pt") ("20pt") + ("draft") ("CJK") ("cjk") ("pgf") + ("hyperref" LaTeX-hyperref-package-options-list) + ("color") ("xcolor") ("ucs") ("utf8x") ("utf8") + ("aspectratio" ("1610" "169" "149" "54" "43" "32"))))) + +;;; beamer.el ends here |