diff --git a/lisp/ox-latex.el b/lisp/ox-latex.el index 6bcbb6d8d..ea84c01a1 100644 --- a/lisp/ox-latex.el +++ b/lisp/ox-latex.el @@ -2698,22 +2698,23 @@ channel." DATA is a parse tree or a secondary string. INFO is a plist containing export options. Modify DATA by side-effect and return it." (let ((valid-object-p - ;; Non-nil when OBJ can be added to the latex math block. - (lambda (obj) + ;; Non-nil when OBJ can be added to the latex math block B. + (lambda (obj b) (pcase (org-element-type obj) (`entity (org-element-property :latex-math-p obj)) (`latex-fragment (let ((value (org-element-property :value obj))) (or (string-prefix-p "\\(" value) (string-match-p "\\`\\$[^$]" value)))) - ((or `subscript `superscript) t))))) + ((and type (or `subscript `superscript)) + (not (org-element-map b type #'identity info t))))))) (org-element-map data '(entity latex-fragment subscript superscript) (lambda (object) ;; Skip objects already wrapped. (when (and (not (eq (org-element-type (org-element-property :parent object)) 'latex-math-block)) - (funcall valid-object-p object)) + (funcall valid-object-p object nil)) (let ((math-block (list 'latex-math-block nil)) (next-elements (org-export-get-next-element object info t)) (last object)) @@ -2725,16 +2726,17 @@ containing export options. Modify DATA by side-effect and return it." ;; MATH-BLOCK swallows consecutive math objects. (catch 'exit (dolist (next next-elements) - (if (not (funcall valid-object-p next)) (throw 'exit nil) - (org-element-extract-element next) - (org-element-adopt-elements math-block next) - ;; Eschew the case: \beta$x$ -> \(\betax\). - (unless (memq (org-element-type next) - '(subscript superscript)) - (org-element-put-property last :post-blank 1)) - (setq last next) - (when (> (or (org-element-property :post-blank next) 0) 0) - (throw 'exit nil)))))) + (unless (funcall valid-object-p next math-block) + (throw 'exit nil)) + (org-element-extract-element next) + (org-element-adopt-elements math-block next) + ;; Eschew the case: \beta$x$ -> \(\betax\). + (unless (memq (org-element-type next) + '(subscript superscript)) + (org-element-put-property last :post-blank 1)) + (setq last next) + (when (> (or (org-element-property :post-blank next) 0) 0) + (throw 'exit nil))))) (org-element-put-property math-block :post-blank (org-element-property :post-blank last))))) info nil '(subscript superscript latex-math-block) t)