From 22d829089fc2ca153f1541abe1d5415d311b33d3 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", set `org-beamer--frame-environment-used' to t. When `org-beamer--frame-environment-used' is t, `org-beamer-template' emits a definition of the alternative frame environment. * lisp/ox-beamer.el (org-beamer--frame-environment-used): New variable. Refs: https://list.orgmode.org/orgmode/87bk7jeik8.fsf@localhost/ https://list.orgmode.org/87a5nux3zr.fsf@t14.reltub.ca/T/ --- lisp/ox-beamer.el | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/lisp/ox-beamer.el b/lisp/ox-beamer.el index 4fad37b59..a79490194 100644 --- a/lisp/ox-beamer.el +++ b/lisp/ox-beamer.el @@ -167,6 +167,10 @@ used inside beamer slides." ;;; Internal Variables +(defvar org-beamer--frame-environment-used nil + "Nil unless `org-beamer-frame-environment' is used. +See `org-beamer--frame-environment'.") + (defconst org-beamer-column-widths "0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.0 :ETC" "The column widths that should be installed as allowed property values.") @@ -429,8 +433,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 set `org-beamer--frame-environment-used' to + ;; t. + (frame (let ((selection + (or (and fragilep + (or (string-search "\\begin{frame}" contents) + (string-search "\\end{frame}" contents)) + org-beamer-frame-environment) + "frame"))) + (unless (string= selection "frame") + (setq org-beamer--frame-environment-used t)) + selection))) (concat "\\begin{" frame "}" ;; Overlay specification, if any. When surrounded by ;; square brackets, consider it as a default @@ -851,8 +868,9 @@ 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 org-beamer--frame-environment-used + (setq org-beamer--frame-environment-used nil) (format "\\newenvironment<>{%s}[1][]{\\begin{frame}#2[environment=%1$s,#1]}{\\end{frame}}\n" org-beamer-frame-environment)) ;; Insert themes. -- 2.43.0