>From ebb7eb32b8ff18b9ff2c9d8686df1cdc6ed28bfb Mon Sep 17 00:00:00 2001 From: rasmus Date: Thu, 29 Aug 2013 12:18:00 +0200 Subject: [PATCH] maybe merge subscript and mathp entity with some checks --- lisp/ox-latex.el | 51 +++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 39 insertions(+), 12 deletions(-) diff --git a/lisp/ox-latex.el b/lisp/ox-latex.el index 1fe918a..cc8ac80 100644 --- a/lisp/ox-latex.el +++ b/lisp/ox-latex.el @@ -1234,9 +1234,26 @@ holding contextual information. See `org-export-data'." "Transcode an ENTITY object from Org to LaTeX. CONTENTS are the definition itself. INFO is a plist holding contextual information." - (let ((ent (org-element-property :latex entity))) - (if (org-element-property :latex-math-p entity) (format "$%s$" ent) ent))) - + (let* ((ent (org-element-property :latex entity)) + (prev (org-export-get-previous-element entity info)) + (next (org-export-get-next-element entity info)) + (no-post-blanks-p (= (or (org-element-property :post-blank entity) 0) 0)) + (no-pre-blanks-p (= (or (org-element-property :post-blank prev) 0) 0)) + (scripts '(subscript superscript))) + + (if (not (org-element-property :latex-math-p entity)) ent + (concat + (if (and no-pre-blanks-p + (memq (org-element-type prev) scripts) + ;; check if nil + (org-export-data prev info)) + "" "$") + ent + (if (and no-post-blanks-p + (memq (org-element-type next) scripts) + ;; check if nil + (org-export-data next info)) + "" "$"))))) ;;;; Example Block @@ -2217,8 +2234,14 @@ channel." (let ((blank (org-element-property :post-blank obj))) (and blank (> blank 0) "\\ ")))))) (plain-text - (setq output - (format "%s\\text{%s}" output (org-export-data obj info)))) + (let ((out (or (org-export-filter-apply-functions + org-export-filter-subscript-functions + (org-export-data obj info) + info) ""))) + (setq output + (if (not (eq out "")) + (format "%s\\text{%s}" output out) + output)))) (otherwise (setq output (concat output @@ -2230,14 +2253,18 @@ channel." ;; or superscript. Do not wrap into curly brackets if OUTPUT is ;; a single character. Also merge consecutive subscript and ;; superscript into the same math snippet. + (if (not (eq output "")) (concat (and (not in-script-p) (let ((prev (org-export-get-previous-element object info))) - (or (not prev) - (not (eq (org-element-type prev) - (if (eq type 'subscript) 'superscript - 'subscript))) - (let ((blank (org-element-property :post-blank prev))) - (and blank (> blank 0))))) + (and + (not (and (eq (org-element-type prev) 'entity) + (org-element-property :latex-math-p prev))) + (or (not prev) + (not (eq (org-element-type prev) + (if (eq type 'subscript) 'superscript + 'subscript))) + (let ((blank (org-element-property :post-blank prev))) + (and blank (> blank 0)))))) "$") (if (eq (org-element-type object) 'subscript) "_" "^") (and (> (length output) 1) "{") @@ -2250,7 +2277,7 @@ channel." (org-export-get-next-element object info)) (if (eq type 'subscript) 'superscript 'subscript)))) - "$")))) + "$"))))) (defun org-latex-subscript (subscript contents info) "Transcode a SUBSCRIPT object from Org to LaTeX. -- 1.8.4