From 4a2e7c8db9463e7c85ae81256f551e56ef4abd05 Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou Date: Sat, 20 Oct 2018 10:51:06 +0200 Subject: [PATCH] ox-beamer: Do not add automatic label when "allowframebreaks" is set * lisp/ox-beamer.el (org-beamer--format-frame): Do not add automatic label when "allowframebreaks" is set in default options. Do not check only headline properties. --- lisp/ox-beamer.el | 49 ++++++++++++++++++++++++----------------------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/lisp/ox-beamer.el b/lisp/ox-beamer.el index a6a7eba01..dc03693a6 100644 --- a/lisp/ox-beamer.el +++ b/lisp/ox-beamer.el @@ -424,9 +424,8 @@ used as a communication channel." (let* ((beamer-opt (org-element-property :BEAMER_OPT headline)) (options ;; Collect nonempty options from default value and - ;; headline's properties. Also add a label for - ;; links. - (cl-remove-if-not 'org-string-nw-p + ;; headline's properties. + (cl-remove-if-not #'org-string-nw-p (append (org-split-string (plist-get info :beamer-frame-default-options) ",") @@ -436,29 +435,31 @@ used as a communication channel." ;; them. (and (string-match "^\\[?\\(.*\\)\\]?$" beamer-opt) (match-string 1 beamer-opt)) - ",")) - ;; Provide an automatic label for the frame - ;; unless the user specified one. Also refrain - ;; from labeling `allowframebreaks' frames; this - ;; is not allowed by beamer. - (unless (and beamer-opt - (or (string-match "\\(^\\|,\\)label=" beamer-opt) - (string-match "allowframebreaks" beamer-opt))) - (list - (let ((label (org-beamer--get-label headline info))) - ;; Labels containing colons need to be - ;; wrapped within braces. - (format (if (string-match-p ":" label) - "label={%s}" - "label=%s") - label)))))))) + ","))))) + (fragile + ;; Add "fragile" option if necessary. + (and fragilep + (not (member "fragile" options)) + (list "fragile"))) + (label + ;; Provide an automatic label for the frame unless + ;; the user specified one. Also refrain from + ;; labeling `allowframebreaks' frames; this is not + ;; allowed by Beamer. + (and (not (member "allowframebreaks" options)) + (not (cl-some (lambda (s) (string-match-p "^label=" s)) + options)) + (list + (let ((label (org-beamer--get-label headline info))) + ;; Labels containing colons need to be + ;; wrapped within braces. + (format (if (string-match-p ":" label) + "label={%s}" + "label=%s") + label)))))) ;; Change options list into a string. (org-beamer--normalize-argument - (mapconcat - 'identity - (if (or (not fragilep) (member "fragile" options)) options - (cons "fragile" options)) - ",") + (mapconcat #'identity (append label fragile options) ",") 'option)) ;; Title. (let ((env (org-element-property :BEAMER_ENV headline)))