From 80615195c4ff6ee79638e4006487fafb48e815eb Mon Sep 17 00:00:00 2001 From: Leo Butler Date: Tue, 12 Mar 2024 15:11:27 -0500 Subject: [PATCH] lisp/ox-beamer.el: constrain use of org-beamer-frame-environment * lisp/ox-beamer.el (org-beamer--format-frame, org-beamer-template): Only use `org-beamer-frame-environment' when a frame is marked as fragile and the frame's contents include either \begin{frame} or \end{frame}. When `org-beamer-frame-environment' is used and not equal to "frame", add the property :beamer-define-frame to INFO and set it to t. When that property is t, `org-beamer-template' emits a definition of the alternative frame environment. Refs: https://list.orgmode.org/orgmode/87bk7jeik8.fsf@localhost/ https://list.orgmode.org/87a5nux3zr.fsf@t14.reltub.ca/T/ --- lisp/ox-beamer.el | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/lisp/ox-beamer.el b/lisp/ox-beamer.el index 4fad37b59..8bae93c11 100644 --- a/lisp/ox-beamer.el +++ b/lisp/ox-beamer.el @@ -429,8 +429,21 @@ used as a communication channel." ;; among `org-beamer-verbatim-elements'. (org-element-map headline org-beamer-verbatim-elements 'identity info 'first-match)) - (frame (or (and fragilep org-beamer-frame-environment) - "frame"))) + ;; If FRAGILEP is non-nil and CONTENTS contains an occurrence + ;; of \begin{frame} or \end{frame}, then set the FRAME + ;; environment to be `org-beamer-frame-environment'; + ;; otherwise, use "frame". If the selected environment is not + ;; "frame", then add the property :beamer-define-frame to + ;; INFO and set it to t. + (frame (let ((selection + (or (and fragilep + (or (string-match-p "\\\\begin{frame}" contents) + (string-match-p "\\\\end{frame}" contents)) + org-beamer-frame-environment) + "frame"))) + (unless (string= selection "frame") + (setq info (plist-put info :beamer-define-frame t))) + selection))) (concat "\\begin{" frame "}" ;; Overlay specification, if any. When surrounded by ;; square brackets, consider it as a default @@ -851,8 +864,8 @@ holding export options." (org-latex--insert-compiler info) ;; Document class and packages. (org-latex-make-preamble info) - ;; Define the alternative frame environment. - (unless (equal "frame" org-beamer-frame-environment) + ;; Define the alternative frame environment, if needed. + (when (plist-get info :beamer-define-frame) (format "\\newenvironment<>{%s}[1][]{\\begin{frame}#2[environment=%1$s,#1]}{\\end{frame}}\n" org-beamer-frame-environment)) ;; Insert themes.