branch: externals/org
commit 80615195c4ff6ee79638e4006487fafb48e815eb
Author: Leo Butler <leo.but...@umanitoba.ca>
Commit: Ihor Radchenko <yanta...@posteo.net>

    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....@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 4fad37b59f..8bae93c11d 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.

Reply via email to