branch: externals/auctex commit d43bfae3fa7aa016120da7a36ed46b83133e5ba4 Author: Ikumi Keita <ik...@ikumi.que.jp> Commit: Ikumi Keita <ik...@ikumi.que.jp>
Overhaul beamer.el * style/beamer.el (LaTeX-beamer-after-insert-env): Use `member' instead of `TeX-member'. Add comment. (TeX-arg-beamer-overlay-spec): Simplify by feature implemented recently in `TeX-arg-string'. (TeX-arg-beamer-default-overlay-spec): New function. (TeX-arg-beamer-frametitle,TeX-arg-beamer-note): Delete. (LaTeX-item-beamer): Accept optional argument for bibitem. Simplify. (LaTeX-bibitem-beamer): New function to use `LaTeX-item-beamer'. (LaTeX-beamer-search-themes): Use `length' instead of `string-width'. Use `substring-no-properties' instead of `substring'. (LaTeX-beamer-themes-list,LaTeX-beamer-inner-themes-list) (LaTeX-beamer-outer-themes-list,LaTeX-beamer-color-themes-list) (LaTeX-beamer-font-themes-list): New functions to use with `TeX-arg-completing-read'. (LaTeX-arg-beamer-theme,LaTeX-arg-beamer-inner-theme) (LaTeX-arg-beamer-outer-theme,LaTeX-arg-beamer-color-theme) (LaTeX-arg-beamer-font-theme): Turn into the above new functions. (LaTeX-beamer-env-frame): Factor out former lambda form into an individual function and adapt for new usage in `LaTeX-add-environments'. (LaTeX-beamer-section): New function to insert section commands as well as asking for their optional arguments. ("beamer"): Update support of section commands with the above new function. Add and improve input support for many macros and environments. Add syntax highlight support. Update local value of `LaTeX-clean-intermediate-suffixes' so that "Clean" command cleans .vrb files. (LaTeX-beamer-class-options): Update class options for current beamer. * style/beamerarticle.el ("beamerarticle"): Allow (sub)paragraph commands. --- style/beamer.el | 702 +++++++++++++++++++++++++++++++++---------------- style/beamerarticle.el | 6 +- 2 files changed, 479 insertions(+), 229 deletions(-) diff --git a/style/beamer.el b/style/beamer.el index 589a26ad27..9a33b348c2 100644 --- a/style/beamer.el +++ b/style/beamer.el @@ -1,8 +1,9 @@ ;;; beamer.el --- AUCTeX style for the latex-beamer class -*- lexical-binding: t; -*- -;; Copyright (C) 2003-2021 Free Software Foundation, Inc. +;; Copyright (C) 2003-2022 Free Software Foundation, Inc. ;; Author: Thomas Baumann <thomas.baum...@ch.tum.de> +;; Maintainer: auctex-de...@gnu.org ;; Created: 2003-12-20 ;; Keywords: tex @@ -41,7 +42,7 @@ "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) + (when (and (member env (LaTeX-verbatim-environments)) (save-excursion (goto-char start) (string-equal (LaTeX-current-environment) "frame"))) @@ -49,6 +50,7 @@ (when (re-search-backward "\\\\begin[ \t]*{frame}" nil t) (let ((end-of-begin (match-end 0))) (goto-char end-of-begin) + ;; FIXME: Add support for skipping over overlay options. (while (forward-comment 1)) (if (eq (char-after) (string-to-char LaTeX-optop)) (progn @@ -70,16 +72,26 @@ (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))) + (LaTeX-section-list-add-locally + '(("part" 0) + ("section" 1) + ("subsection" 2) + ("subsubsection" 3)) + t) + (LaTeX-largest-level-set "part") + (make-local-variable 'LaTeX-section-hook) + (setq LaTeX-section-hook + '(LaTeX-section-heading + LaTeX-section-title + LaTeX-beamer-section)) + (if LaTeX-beamer-section-labels-flag + (setq LaTeX-section-hook + (append LaTeX-section-hook '(LaTeX-section-label)))) (setq LaTeX-item-list (append '(("itemize" . LaTeX-item-beamer) - ("enumerate" . LaTeX-item-beamer)) + ("enumerate" . LaTeX-item-beamer) + ("thebibliography" . LaTeX-bibitem-beamer)) LaTeX-item-list)) (setq LaTeX-default-document-environment "frame") @@ -87,96 +99,240 @@ (LaTeX-paragraph-commands-add-locally "frametitle") (TeX-add-symbols - '("alert" [ TeX-arg-beamer-overlay-spec ] 1) - '("alt" [ TeX-arg-beamer-overlay-spec ] 2) + '("AtBeginSection" ["Special star text"] t) + '("AtBeginSubsection" ["Special star text"] t) + '("AtBeginSubsubsection" ["Special star text"] t) + '("AtBeginPart" t) + '("AtBeginLecture" t) + '("AtBeginNote" t) + '("AtEndNote" t) + '("action" [TeX-arg-beamer-overlay-spec "Action spec"] t) + '("againframe" [TeX-arg-beamer-overlay-spec] + [TeX-arg-beamer-default-overlay-spec] + ["Options"] "Frame label") + '("alert" [TeX-arg-beamer-overlay-spec] 1) + '("alt" TeX-arg-beamer-overlay-spec "Text on specified slides" + "Text on other slides") + '("appendix" [TeX-arg-beamer-overlay-spec "Mode spec"]) + '("author" [LaTeX-arg-author "Short author names"] LaTeX-arg-author) + '("beamerdefaultoverlayspecification" + TeX-arg-beamer-default-overlay-spec) '("beamerbutton" 1) '("beamergotobutton" 1) '("beamerreturnbutton" 1) '("beamerskipbutton" 1) - '("frame" TeX-arg-beamer-frametitle) + '("column" [TeX-arg-beamer-overlay-spec] ["Placement(t,T,c,b)"] + (TeX-arg-length "Column width")) + '("date" [TeX-arg-date "Short date"] TeX-arg-date) + ;; Beamer frame macro is obsolete, and standard LaTeX frame macro + ;; is available in frame environment. + ;; '("frame" TeX-arg-beamer-frametitle) + "framebreak" "noframebreak" + '("framelatex" t) '("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) + [TeX-arg-beamer-overlay-spec] ["Short title"] + (TeX-arg-string "Title" nil LaTeX-beamer-frametitle-history)) + '("framesubtitle" [TeX-arg-beamer-overlay-spec] "Subtitle") + '("framezoom" (TeX-arg-beamer-overlay-spec "Overlay having button") + (TeX-arg-beamer-overlay-spec "Zoomed overlay") ["Options"] + (TeX-arg-pair "Upper left X" "Upper left Y") + (TeX-arg-pair "Zoom area width" "Zoom area depth")) + '("hyperlink" [TeX-arg-beamer-overlay-spec] "Target name" t) + '("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) + '("hyperlinksectionstart" [TeX-arg-beamer-overlay-spec] 1) + '("hyperlinksectionend" [TeX-arg-beamer-overlay-spec] 1) + '("hyperlinksectionstartnext" [TeX-arg-beamer-overlay-spec] 1) + '("hyperlinksectionendprev" [TeX-arg-beamer-overlay-spec] 1) + '("hyperlinksubsectionstart" [TeX-arg-beamer-overlay-spec] 1) + '("hyperlinksubsectionend" [TeX-arg-beamer-overlay-spec] 1) + '("hyperlinksubsectionstartnext" [TeX-arg-beamer-overlay-spec] 1) + '("hyperlinksubsectionendprev" [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] "Target name" t) + '("includegraphics" [TeX-arg-beamer-overlay-spec] + [LaTeX-arg-graphicx-includegraphics-key-val] LaTeX-arg-includegraphics) + '("includeonlyframes" "Frame label(s)") + '("includeonlylecture" "Lecture label") + '("includeslide" ["Options"] "Label") + '("institute" ["Short institute name"] t) + '("invisible" [TeX-arg-beamer-overlay-spec] 1) + '("keywords" t) + '("label" [TeX-arg-beamer-overlay-spec] TeX-arg-label) + '("lecture" ["Short lecture name"] "Lecture name" "Lecture label") '("logo" 1) - '("note" TeX-arg-beamer-note 1) - '("only" [ TeX-arg-beamer-overlay-spec ] 1) - '("onslide" [ TeX-arg-beamer-overlay-spec ]) - '("partpage") + '("mode" [TeX-arg-beamer-overlay-spec "Mode"] t) + "mode*" + + ;; Adapted copies from latex.el + '("newcommand<>" TeX-arg-define-macro [TeX-arg-define-macro-arguments] t) + '("renewcommand<>" TeX-arg-macro [TeX-arg-define-macro-arguments] t) + '("newenvironment<>" TeX-arg-define-environment + [TeX-arg-define-macro-arguments] 2) + '("renewenvironment<>" TeX-arg-environment + [TeX-arg-define-macro-arguments] 2) + + ;; TODO: Support the case \note is used outside frame env. + '("note" [TeX-arg-beamer-overlay-spec] ["Options"] t) + '("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") + '("resetcounteronoverlays" TeX-arg-counter) + "sectionpage" + '("setbeameroption" t) + '("setbeamersize" t) + '("setjobnamebeamerversion" "Filename without extension") + '("structure" [TeX-arg-beamer-overlay-spec] 1) + "subsectionpage" + '("subtitle" ["Short subtitle"] t) + '("subject" t) + '("tableofcontents" ["Options"]) + '("temporal" TeX-arg-beamer-overlay-spec + "Before slide text" "Default text" "After slide text") + "titlepage" + '("title" ["Short title"] t) '("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)) + + '("transblindshorizontal" [TeX-arg-beamer-overlay-spec] ["Options"]) + '("transblindsvertical" [TeX-arg-beamer-overlay-spec] ["Options"]) + '("transboxin" [TeX-arg-beamer-overlay-spec] ["Options"]) + '("transboxout" [TeX-arg-beamer-overlay-spec] ["Options"]) + '("transcover" [TeX-arg-beamer-overlay-spec] ["Options"]) + '("transdissolve" [TeX-arg-beamer-overlay-spec] ["Options"]) + '("transfade" [TeX-arg-beamer-overlay-spec] ["Options"]) + '("transfly" [TeX-arg-beamer-overlay-spec] ["Options"]) + '("transglitter" [TeX-arg-beamer-overlay-spec] ["Options"]) + '("transpush" [TeX-arg-beamer-overlay-spec] ["Options"]) + '("transreplace" [TeX-arg-beamer-overlay-spec] ["Options"]) + '("transsplitverticalin" [TeX-arg-beamer-overlay-spec] ["Options"]) + '("transsplitverticalout" [TeX-arg-beamer-overlay-spec] ["Options"]) + '("transsplithorizontalin" [TeX-arg-beamer-overlay-spec] ["Options"]) + '("transsplithorizontalout" [TeX-arg-beamer-overlay-spec] ["Options"]) + '("transwipe" [TeX-arg-beamer-overlay-spec] ["Options"]) + '("transduration" [TeX-arg-beamer-overlay-spec] "Seconds") + + '("uncover" [TeX-arg-beamer-overlay-spec] t) + '("usetheme" ["Options"] + (TeX-arg-completing-read (LaTeX-beamer-themes-list) "Theme")) + '("useinnertheme" ["Options"] + (TeX-arg-completing-read (LaTeX-beamer-inner-themes-list) "Theme")) + '("useoutertheme" ["Options"] + (TeX-arg-completing-read (LaTeX-beamer-outer-themes-list) "Theme")) + '("usecolortheme" ["Options"] + (TeX-arg-completing-read (LaTeX-beamer-color-themes-list) "Theme")) + '("usefonttheme" ["Options"] + (TeX-arg-completing-read (LaTeX-beamer-font-themes-list) "Theme")) + '("setbeamercolor" "Beamer color" "Color specification") + '("setbeamercolor*" "Beamer color" "Color specification") + '("usebeamercolor" ["fg or bg"] "Beamer color") + '("usebeamercolor*" ["fg or bg"] "Beamer color") + '("setbeamerfont" "Beamer font" "Font attributes") + '("setbeamerfont*" "Beamer font" "Font attributes") + '("usebeamerfont" "Beamer font") + '("usebeamerfont*" "Beamer font") + '("setbeamertemplate" "Element" ["Predefined option"] t) + '("addtobeamertemplate" "Element" "Pre text" "Post test") + '("defbeamertemplate" [TeX-arg-beamer-overlay-spec "Mode spec"] + "Element" "Predefined option" [TeX-arg-define-macro-arguments] t) + '("defbeamertemplatealias" "Element" "New predefined option" + "Existing predefined option") + '("defbeamertemplateparent" "Parent template name" + ["Predefined option"] "Child template list" + [TeX-arg-define-macro-arguments] t) + '("ifbeamercolorempty" ["fg or bg"] "Beamer color name" + "If undefined" "If defined") + '("setbeamercovered" "Options") + '("opaqueness" [TeX-arg-beamer-overlay-spec] "Opaqueness (in %)") + + '("visible" [TeX-arg-beamer-overlay-spec] 1)) + + ;; TODO: Font commands accept overlay specs. + ;; Support commands to manipulate templates? (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") + '("abstract" LaTeX-env-args + [TeX-arg-beamer-overlay-spec "Action spec"]) + '("actionenv" LaTeX-env-args + [TeX-arg-beamer-overlay-spec "Action spec"]) + '("alertblock" LaTeX-env-args + [TeX-arg-beamer-overlay-spec "Action spec"] "Title") + '("beamerboxesrounded" ["Options"] "Header") + '("beamercolorbox" ["Options"] "Beamer color") + '("block" LaTeX-env-args + [TeX-arg-beamer-overlay-spec "Action spec"] "Title") + '("column" LaTeX-env-args [TeX-arg-beamer-overlay-spec] + ["Placement(t,T,c,b)"] (TeX-arg-length "Width")) + '("columns" LaTeX-env-args [TeX-arg-beamer-overlay-spec] ["Options"]) + ;; FIXME: Not on user reference. + ;; "columnsonlytextwidth" + '("exampleblock" LaTeX-env-args + [TeX-arg-beamer-overlay-spec "Action spec"] "Title") + '("frame" LaTeX-env-args [TeX-arg-beamer-overlay-spec] + [TeX-arg-beamer-default-overlay-spec] + [TeX-arg-key-val (("allowdisplaybreaks" ("0" "1" "2" "3" "4")) + ("allowframebreaks") ("b") ("c") ("t") ("s") + ("noframenumbering") + ("fragile" ("singleslide")) + ("environment") ("label") ("plain") ("shrink") + ("squeeze"))] + LaTeX-beamer-env-frame) + + '("onlyenv" LaTeX-env-args [TeX-arg-beamer-overlay-spec]) + '("altenv" LaTeX-env-args [TeX-arg-beamer-overlay-spec] + "Begin text" "End text" "Alternate begin text" "Alternate end text") + '("visibleenv" LaTeX-env-args [TeX-arg-beamer-overlay-spec]) + '("uncoverenv" LaTeX-env-args [TeX-arg-beamer-overlay-spec]) + '("invisibleenv" LaTeX-env-args [TeX-arg-beamer-overlay-spec]) + + '("structureenv" LaTeX-env-args [TeX-arg-beamer-overlay-spec]) + '("alertenv" LaTeX-env-args [TeX-arg-beamer-overlay-spec]) + + '("theorem" LaTeX-env-args + [TeX-arg-beamer-overlay-spec "Action spec"] ["Additional text"]) + '("corollary" LaTeX-env-args + [TeX-arg-beamer-overlay-spec "Action spec"] ["Additional text"]) + '("definition" LaTeX-env-args + [TeX-arg-beamer-overlay-spec "Action spec"] ["Additional text"]) + '("definitions" LaTeX-env-args + [TeX-arg-beamer-overlay-spec "Action spec"] ["Additional text"]) + '("fact" LaTeX-env-args + [TeX-arg-beamer-overlay-spec "Action spec"] ["Additional text"]) + '("lemma" LaTeX-env-args + [TeX-arg-beamer-overlay-spec "Action spec"] ["Additional text"]) + '("example" LaTeX-env-args + [TeX-arg-beamer-overlay-spec "Action spec"] ["Additional text"]) + '("examples" LaTeX-env-args + [TeX-arg-beamer-overlay-spec "Action spec"] ["Additional text"]) + '("proof" LaTeX-env-args + [TeX-arg-beamer-overlay-spec "Action spec"] ["Proof name"]) + + '("overlayarea" LaTeX-env-args + (TeX-arg-length "Area width") (TeX-arg-length "Area height")) + '("overprint" LaTeX-env-args [TeX-arg-length "Area width"]) + "semiverbatim" + + '("verse" LaTeX-env-args + [TeX-arg-beamer-overlay-spec "Action spec"]) + '("quotation" LaTeX-env-args + [TeX-arg-beamer-overlay-spec "Action spec"]) + '("quote" LaTeX-env-args + [TeX-arg-beamer-overlay-spec "Action spec"])) + + ;; TODO: itemize, enumerate and description envs accept default + ;; overlay spec as optional argument. + ;; We definitely need more completion support for both macros and + ;; environments. + (LaTeX-add-counters "lecture" "part" "section" "subsection" "subsubsection" "subsectionslide" "framenumber" "figure" "table" "beamerpauses") @@ -192,7 +348,67 @@ ("subtitle" "[{") ("author" "[{") ("date" "[{") - ("frametitle" "<[{")) 'slide-title))) + ("institute" "[{") + ("frametitle" "<[{") + ("framesubtitle" "<[{")) + 'slide-title) + (font-latex-add-keywords '(("item" "<[") + ("bibitem" "<[{")) + 'textual) + (font-latex-add-keywords '(("textbf" "<{") + ("textsc" "<{") + ("textup" "<{")) + 'bold-command) + (font-latex-add-keywords '(("emph" "<{") + ("textit" "<{") + ("textsl" "<{")) + 'italic-command) + (font-latex-add-keywords '(("textmd" "<{") + ("textrm" "<{") + ("textsf" "<{") + ("texttt" "<{") + ("textnormal" "<{") + ("textcolor" "<[{")) + 'type-command) + (font-latex-add-keywords '(("color" "<[{")) + 'type-declaration) + (font-latex-add-keywords '(("label" "<{") + ("hyperlink" "<{{<") + ("hypertarget" "<{{")) + 'reference) + (font-latex-add-keywords '(("pause" "[") + ("logo" "{") + ("newcommand" "<|{\\[[{") + ("renewcommand" "<|{\\[[{") + ("newenvironment" "<{[[{{") + ("renewenvironment" "<{[[{{") + ("AtBeginSection" "[{") + ("AtBeginSubsection" "[{") + ("AtBeginSubsubsection" "[{") + ("AtBeginPart" "{") + ("AtBeginLecture" "{") + ("titlepage" "") + ("sectionpage" "") + ("subsectionpage" "") + ("partpage" "") + ("tableofcontents" "[") + ("column" "<[{") + ("againframe" "<[[{") + ("usetheme" "[{") + ("usecolortheme" "[{") + ("usefonttheme" "[{") + ("useinnertheme" "[{") + ("useoutertheme" "[{") + ("includeonlyframes" "{") + ("includeonlylecture" "{")) + 'function) + (font-latex-add-keywords '(("resetcounteronoverlays" "{")) + 'variable)) + ;; TODO: Adjust section commands to accept <> option. + + ;; Additional intermediate files + (add-to-list (make-local-variable 'LaTeX-clean-intermediate-suffixes) + "\\.vrb")) TeX-dialect) (defun TeX-arg-beamer-overlay-spec (optional &optional prompt) @@ -200,47 +416,55 @@ 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 + (TeX-arg-string optional (or prompt "Overlay") nil nil nil "<" ">") + (indent-according-to-mode)) + +(defun TeX-arg-beamer-default-overlay-spec (optional) + "Prompt for default overlay specification. +If OPTIONAL is non-nil, insert the specification only if +non-empty and enclosed in \"<>\". If empty and OPTIONAL is nil, +insert just \"{}\"." + (let ((spec (TeX-read-string + (TeX-argument-prompt optional nil "Default overlay")))) + (cond + ((< 0 (length spec)) + (TeX-argument-insert (concat "<" spec ">") optional)) + ((not optional) + ;; Clear default for \beamerdefaultoverlayspecification. + (insert TeX-grop TeX-grcl)) + (t + ;; Nop for clarity. + nil)))) + +;; (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 (&optional macro) + "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") +unconditionally. + +Optional MACRO can be, for example, \"bibitem\"." + (TeX-insert-macro (or 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)) + (TeX-arg-beamer-overlay-spec t)) + (insert " ")) -(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-bibitem-beamer () + "Insert a new bibitem 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." + (LaTeX-item-beamer "bibitem")) (defun LaTeX-beamer-search-themes (&optional regexp extensions length) "Search for beamer themes matching REGEXP with EXTENSIONS. @@ -252,7 +476,7 @@ also be a string. Then the length of the string is used." (chars (cond ((integerp length) length) ((stringp length) - (string-width length)) + (length length)) ;; Try some DWIM magic... ((and (not length) (string-match "beamer[A-Za-z0-9]*theme" match)) @@ -265,117 +489,139 @@ also be a string. Then the length of the string is used." (lambda (file) (let ((case-fold-search nil)) (and (numberp (string-match match file)) - (substring file chars)))) + (substring-no-properties 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-themes-list () + "Return a list of beamer themes for completion." + (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)))) + +(defun LaTeX-beamer-inner-themes-list () + "Return a list of beamer inner themes for completion." + (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)))) + +(defun LaTeX-beamer-outer-themes-list () + "Return a list of beamer outer themes for completion." + (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)))) + +(defun LaTeX-beamer-color-themes-list () + "Return a list of beamer color themes for completion." + (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)))) + +(defun LaTeX-beamer-font-themes-list () + "Return a list of beamer font themes for completion." + (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)))) + +(defun LaTeX-beamer-env-frame (_ignored) + "Insert beamer frame environment title." + (let ((title (TeX-read-string "(Optional) Title: " nil + 'LaTeX-beamer-frametitle-history))) + (unless (zerop (length title)) + (save-excursion + (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)))))) + +(defun LaTeX-beamer-section () + "Hook to prompt for beamer section and insert it." + (let ((star (string-suffix-p "*" LaTeX-name)) + mode-spec short-title) + (when (and LaTeX-level (< LaTeX-level 4)) + (setq mode-spec (TeX-read-string "(Optional) Mode spec: ") + short-title (unless star + (TeX-read-string "(Optional) Short title: ")))) + ;; The rest of this function is adapted copy of + ;; `LaTeX-section-section'. + (unless (save-excursion + (re-search-backward + (concat "^\\s-*\n\\s-*\\=\\|^\\s-*" (regexp-quote TeX-esc) + "begin") + (line-beginning-position 0) t)) + (LaTeX-newline)) + (insert TeX-esc (if star + (substring-no-properties LaTeX-name 0 -1) + LaTeX-name)) + (if (< 0 (length mode-spec)) + (insert "<" mode-spec ">")) + (if star (insert "*")) + (if (< 0 (length short-title)) + (insert LaTeX-optop short-title LaTeX-optcl)) + (insert TeX-grop) + (if (zerop (length LaTeX-title)) + (set-marker LaTeX-done-mark (point))) + (insert LaTeX-title TeX-grcl) + (LaTeX-newline) + ;; If RefTeX is available, tell it that we've just made a new section + (and (fboundp 'reftex-notice-new-section) + (reftex-notice-new-section)))) (defun LaTeX-beamer-class-options () "Read the beamer class options from the user." (TeX-load-style "hyperref") + (TeX-load-style "color") + (TeX-load-style "xcolor") (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") + ("leqno") ("fleqn") ("handout") ("trans") + ("ignorenonframetext") ("onlytextwidth") ("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"))))) + ("color" LaTeX-color-package-options) + ("xcolor" LaTeX-xcolor-package-options) + ("ucs") ("utf8x") ("utf8") + ("aspectratio" ("2013" "1610" "169" "149" "141" "54" "43" "32"))))) ;;; beamer.el ends here diff --git a/style/beamerarticle.el b/style/beamerarticle.el index 136947ac17..09d58163b5 100644 --- a/style/beamerarticle.el +++ b/style/beamerarticle.el @@ -32,4 +32,8 @@ (TeX-add-style-hook "beamerarticle" (lambda () - (TeX-run-style-hooks "beamer"))) + (TeX-run-style-hooks "beamer") + + (LaTeX-section-list-add-locally + '(("paragraph" 4) + ("subparagraph" 5)))))