diff options
author | Nicolas Goaziou <mail@nicolasgoaziou.fr> | 2016-06-23 00:33:22 +0200 |
---|---|---|
committer | Nicolas Goaziou <mail@nicolasgoaziou.fr> | 2016-06-23 00:33:22 +0200 |
commit | 2f2e6625ac510b6035fcf8e505b9c76e1468b47b (patch) | |
tree | 0e3bbc61311d972d7c8b15dd70cc6228aeb825da | |
parent | ecffcbcf1c6a9e03580e2992d73f0b42f209f1ca (diff) | |
download | org-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.el | 117 | ||||
-rw-r--r-- | lisp/ox-html.el | 4 |
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) |