summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Goaziou <mail@nicolasgoaziou.fr>2016-06-23 00:33:22 +0200
committerNicolas Goaziou <mail@nicolasgoaziou.fr>2016-06-23 00:33:22 +0200
commit2f2e6625ac510b6035fcf8e505b9c76e1468b47b (patch)
tree0e3bbc61311d972d7c8b15dd70cc6228aeb825da
parentecffcbcf1c6a9e03580e2992d73f0b42f209f1ca (diff)
downloadorg-mode-2f2e6625ac510b6035fcf8e505b9c76e1468b47b.tar.gz
Work around a display bug when previewing LaTeX fragments
* lisp/org.el (org-format-latex): Change signature. (org-toggle-latex-fragment): * lisp/ox-html.el (org-html-format-latex): Apply signature change.
-rw-r--r--lisp/org.el117
-rw-r--r--lisp/ox-html.el4
2 files changed, 60 insertions, 61 deletions
diff --git a/lisp/org.el b/lisp/org.el
index ed0337c..4082df6 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -19074,66 +19074,65 @@ for all fragments in the buffer."
(when (display-graphic-p)
(catch 'exit
(save-excursion
- (let ((window-start (window-start)) msg)
- (save-restriction
- (cond
- ((or (equal arg '(16))
- (and (equal arg '(4))
- (org-with-limited-levels (org-before-first-heading-p))))
- (if (org-remove-latex-fragment-image-overlays)
- (progn (message "LaTeX fragments images removed from buffer")
- (throw 'exit nil))
- (setq msg "Creating images for buffer...")))
- ((equal arg '(4))
- (org-with-limited-levels (org-back-to-heading t))
- (let ((beg (point))
- (end (progn (org-end-of-subtree t) (point))))
- (if (org-remove-latex-fragment-image-overlays beg end)
- (progn
- (message "LaTeX fragment images removed from subtree")
- (throw 'exit nil))
- (setq msg "Creating images for subtree...")
- (narrow-to-region beg end))))
- ((let ((datum (org-element-context)))
- (when (memq (org-element-type datum)
- '(latex-environment latex-fragment))
- (let* ((beg (org-element-property :begin datum))
- (end (org-element-property :end datum)))
- (if (org-remove-latex-fragment-image-overlays beg end)
- (progn (message "LaTeX fragment image removed")
- (throw 'exit nil))
- (narrow-to-region beg end)
- (setq msg "Creating image..."))))))
- (t
- (org-with-limited-levels
- (let ((beg (if (org-at-heading-p) (line-beginning-position)
- (outline-previous-heading)
- (point)))
- (end (progn (outline-next-heading) (point))))
- (if (org-remove-latex-fragment-image-overlays beg end)
- (progn
- (message "LaTeX fragment images removed from section")
+ (let (beg end msg)
+ (cond
+ ((or (equal arg '(16))
+ (and (equal arg '(4))
+ (org-with-limited-levels (org-before-first-heading-p))))
+ (if (org-remove-latex-fragment-image-overlays)
+ (progn (message "LaTeX fragments images removed from buffer")
(throw 'exit nil))
- (setq msg "Creating images for section...")
- (narrow-to-region beg end))))))
- (let ((file (buffer-file-name (buffer-base-buffer))))
- (org-format-latex
- (concat org-latex-preview-ltxpng-directory
- (file-name-sans-extension (file-name-nondirectory file)))
- ;; Emacs cannot overlay images from remote hosts.
- ;; Create it in `temporary-file-directory' instead.
- (if (file-remote-p file) temporary-file-directory
- default-directory)
- 'overlays msg 'forbuffer
- org-latex-create-formula-image-program)))
- ;; Work around a bug that doesn't restore window's start
- ;; when widening back the buffer.
- (set-window-start nil window-start)
+ (setq msg "Creating images for buffer...")))
+ ((equal arg '(4))
+ (org-with-limited-levels (org-back-to-heading t))
+ (setq beg (point))
+ (setq end (progn (org-end-of-subtree t) (point)))
+ (if (org-remove-latex-fragment-image-overlays beg end)
+ (progn
+ (message "LaTeX fragment images removed from subtree")
+ (throw 'exit nil))
+ (setq msg "Creating images for subtree...")))
+ ((let ((datum (org-element-context)))
+ (when (memq (org-element-type datum)
+ '(latex-environment latex-fragment))
+ (setq beg (org-element-property :begin datum))
+ (setq end (org-element-property :end datum))
+ (if (org-remove-latex-fragment-image-overlays beg end)
+ (progn (message "LaTeX fragment image removed")
+ (throw 'exit nil))
+ (setq msg "Creating image...")))))
+ (t
+ (org-with-limited-levels
+ (setq beg (if (org-at-heading-p) (line-beginning-position)
+ (outline-previous-heading)
+ (point)))
+ (setq end (progn (outline-next-heading) (point)))
+ (if (org-remove-latex-fragment-image-overlays beg end)
+ (progn
+ (message "LaTeX fragment images removed from section")
+ (throw 'exit nil))
+ (setq msg "Creating images for section...")))))
+ (let ((file (buffer-file-name (buffer-base-buffer))))
+ (org-format-latex
+ (concat org-latex-preview-ltxpng-directory
+ (file-name-sans-extension (file-name-nondirectory file)))
+ beg end
+ ;; Emacs cannot overlay images from remote hosts. Create
+ ;; it in `temporary-file-directory' instead.
+ (if (file-remote-p file) temporary-file-directory
+ default-directory)
+ 'overlays msg 'forbuffer
+ org-latex-create-formula-image-program))
(message (concat msg "done")))))))
(defun org-format-latex
- (prefix &optional dir overlays msg forbuffer processing-type)
- "Replace LaTeX fragments with links to an image, and produce images.
+ (prefix &optional beg end dir overlays msg forbuffer processing-type)
+ "Replace LaTeX fragments with links to an image.
+
+The function takes care of creating the replacement image.
+
+Only consider fragments between BEG and END when those are
+provided.
When optional argument OVERLAYS is non-nil, display the image on
top of the fragment instead of replacing it.
@@ -19147,11 +19146,11 @@ Some of the options can be changed using the variable
(let* ((math-regexp "\\$\\|\\\\[([]\\|^[ \t]*\\\\begin{[A-Za-z0-9*]+}")
(cnt 0)
checkdir-flag)
- (goto-char (point-min))
+ (goto-char (or beg (point-min)))
;; Optimize overlay creation: (info "(elisp) Managing Overlays").
(when (and overlays (memq processing-type '(dvipng imagemagick)))
- (overlay-recenter (point-max)))
- (while (re-search-forward math-regexp nil t)
+ (overlay-recenter (or end (point-max))))
+ (while (re-search-forward math-regexp end t)
(unless (and overlays
(eq (get-char-property (point) 'org-overlay-type)
'org-latex-overlay))
diff --git a/lisp/ox-html.el b/lisp/ox-html.el
index dd88d92..f604211 100644
--- a/lisp/ox-html.el
+++ b/lisp/ox-html.el
@@ -2691,8 +2691,8 @@ a plist containing export properties."
(setq latex-frag (concat latex-header latex-frag))))
(with-temp-buffer
(insert latex-frag)
- (org-format-latex cache-relpath cache-dir nil "Creating LaTeX Image..."
- nil processing-type)
+ (org-format-latex cache-relpath nil nil cache-dir nil
+ "Creating LaTeX Image..." nil processing-type)
(buffer-string))))
(defun org-html-latex-environment (latex-environment contents info)