With this patch, given
* Derive | <-- POINT IS HERE
...
** Step 1.
... \( LaTeX \) ...
** Step 2.
... \( LaTeX \) ...
or
* Derive
... | <-- POINT IS HERE
** Step 1.
... \( LaTeX \) ...
** Step 2.
... \( LaTeX \) ...
all of "Derive" is previewed upon `org-latex-preview',
* Derive
... | <-- NOT STOPPING HERE
** Step 1.
... \( LaTeX \) ...
** Step 2.
... \( LaTeX \) ...
P.S. I hope the upcoming LaTeX preview will work like this too.
Rudy
>From bb0ece81889be34f8b45be01509b81558f99fed0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Rudolf=20Adamkovi=C4=8D?= <[email protected]>
Date: Fri, 21 Mar 2025 19:22:27 +0100
Subject: [PATCH] Preview LaTeX in sections recursively
* lisp/org.el (org--latex-preview-section-bounds): Compute the bounds
of the current section for `org-latex-preview'.
(org-latex-preview): Use `org--latex-preview-section-bounds' to
preview sections recursively.
---
lisp/org.el | 37 +++++++++++++++++++++----------------
1 file changed, 21 insertions(+), 16 deletions(-)
diff --git a/lisp/org.el b/lisp/org.el
index ebc889463..4b8453661 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -16196,6 +16196,19 @@ BEG and END are buffer positions."
default-directory)
'overlays nil 'forbuffer org-preview-latex-default-process))))
+(defun org--latex-preview-section-bounds ()
+ "Return the boundaries of the section.
+Value is a list of one or more cons cells of the form (START . END).
+Section bounds include subsections, if some exist."
+ (if (org-before-first-heading-p)
+ (cons (point-min)
+ (org-entry-end-position))
+ (save-excursion
+ (org-back-to-heading t)
+ (let ((element (org-element-at-point)))
+ (cons (org-element-begin element)
+ (org-element-end element))))))
+
(defun org-latex-preview (&optional arg)
"Toggle preview of the LaTeX fragment at point.
@@ -16231,15 +16244,10 @@ fragments in the buffer."
(message "Creating LaTeX previews in buffer... done."))
;; Clear current section.
((equal arg '(4))
- (org-clear-latex-preview
- (if (use-region-p)
- (region-beginning)
- (if (org-before-first-heading-p) (point-min)
- (save-excursion
- (org-with-limited-levels (org-back-to-heading t) (point)))))
- (if (use-region-p)
- (region-end)
- (org-with-limited-levels (org-entry-end-position)))))
+ (let ((bounds (if (use-region-p)
+ (region-bounds)
+ (org--latex-preview-section-bounds))))
+ (org-clear-latex-preview (car bounds) (cdr bounds))))
((use-region-p)
(message "Creating LaTeX previews in region...")
(org--latex-preview-region (region-beginning) (region-end))
@@ -16257,13 +16265,10 @@ fragments in the buffer."
t))))
;; Preview current section.
(t
- (let ((beg (if (org-before-first-heading-p) (point-min)
- (save-excursion
- (org-with-limited-levels (org-back-to-heading t) (point)))))
- (end (org-with-limited-levels (org-entry-end-position))))
- (message "Creating LaTeX previews in section...")
- (org--latex-preview-region beg end)
- (message "Creating LaTeX previews in section... done.")))))
+ (let ((bounds (org--latex-preview-section-bounds)))
+ (message "Creating LaTeX previews in section...")
+ (org--latex-preview-region (car bounds) (cdr bounds))
+ (message "Creating LaTeX previews in section... done.")))))
(defun org-format-latex
(prefix &optional beg end dir overlays msg forbuffer processing-type)
--
2.39.5 (Apple Git-154)
--
"Logic is a science of the necessary laws of thought, without which no
employment of the understanding and the reason takes place."
--- Immanuel Kant, 1785
Rudolf Adamkovič <[email protected]> [he/him]
http://adamkovic.org