forked from mirrors/org-mode
org-latex-preview: Split org-create-latex-preview
* lisp/org-latex-preview.el (org-create-latex-preview, org-create-latex-export): Split the export and preview functionality of `org-create-latex-preview' into two functions: a rewritten `org-create-latex-preview' that now /only/ deals with previews, and `org-create-latex-export' for exports. (org-latex-preview-fragments): Use the new `org-create-latex-preview`. (org-latex-replace-fragments): Use the new `org-create-latex-export`.
This commit is contained in:
parent
9edfc99fda
commit
712f97aaaf
|
@ -384,7 +384,7 @@ The way this is done is set by PROCESSING-TYPE, which can be either:
|
||||||
- mathml, in which case the math fragment is replace by the result of
|
- mathml, in which case the math fragment is replace by the result of
|
||||||
`org-format-latex-as-mathml'.
|
`org-format-latex-as-mathml'.
|
||||||
- an entry in `org-preview-latex-process-alist', in which case the
|
- an entry in `org-preview-latex-process-alist', in which case the
|
||||||
math fragment is replaced with `org-create-latex-preview'.
|
math fragment is replaced with `org-create-latex-export'.
|
||||||
|
|
||||||
Generated image files are placed in DIR with the prefix PREFIX. Note
|
Generated image files are placed in DIR with the prefix PREFIX. Note
|
||||||
that PREFIX may itself contain a directory path component.
|
that PREFIX may itself contain a directory path component.
|
||||||
|
@ -429,9 +429,11 @@ When generating output files, MSG will be `message'd if given."
|
||||||
(insert (org-format-latex-as-mathml
|
(insert (org-format-latex-as-mathml
|
||||||
value block-type prefix dir)))
|
value block-type prefix dir)))
|
||||||
((assq processing-type org-preview-latex-process-alist)
|
((assq processing-type org-preview-latex-process-alist)
|
||||||
(org-create-latex-preview
|
(let ((image-dir (expand-file-name prefix dir)))
|
||||||
prefix beg end dir nil nil processing-type
|
(unless (file-exists-p image-dir)
|
||||||
value block-type 'checkdir))
|
(make-directory image-dir t)))
|
||||||
|
(org-create-latex-export
|
||||||
|
processing-type context prefix dir block-type))
|
||||||
(t (error "Unknown conversion process %s for LaTeX fragments"
|
(t (error "Unknown conversion process %s for LaTeX fragments"
|
||||||
processing-type))))))))))
|
processing-type))))))))))
|
||||||
|
|
||||||
|
@ -456,25 +458,21 @@ The previews are placed in
|
||||||
(overlay-recenter (or end (point-max))))
|
(overlay-recenter (or end (point-max))))
|
||||||
(unless (eq (get-char-property (point) 'org-overlay-type)
|
(unless (eq (get-char-property (point) 'org-overlay-type)
|
||||||
'org-latex-overlay)
|
'org-latex-overlay)
|
||||||
|
(let ((image-dir (expand-file-name
|
||||||
|
(concat org-preview-latex-image-directory "org-ltximg")
|
||||||
|
dir)))
|
||||||
|
(unless (file-exists-p image-dir)
|
||||||
|
(make-directory image-dir t)))
|
||||||
(save-excursion
|
(save-excursion
|
||||||
(goto-char (or beg (point-min)))
|
(goto-char (or beg (point-min)))
|
||||||
(while (re-search-forward org-latex-tentative-math-re end t)
|
(while (re-search-forward org-latex-tentative-math-re end t)
|
||||||
(let* ((context (org-element-context))
|
(let* ((context (org-element-context))
|
||||||
(type (org-element-type context)))
|
(type (org-element-type context)))
|
||||||
(when (memq type '(latex-environment latex-fragment))
|
(when (memq type '(latex-environment latex-fragment))
|
||||||
(let ((value (org-element-property :value context))
|
(if (assq processing-type org-preview-latex-process-alist)
|
||||||
(beg (org-element-property :begin context))
|
(org-create-latex-preview processing-type context dir)
|
||||||
(end (save-excursion
|
(error "Unknown conversion process %s for previewing LaTeX fragments"
|
||||||
(goto-char (org-element-property :end context))
|
processing-type))))))))
|
||||||
(skip-chars-backward " \r\t\n")
|
|
||||||
(point))))
|
|
||||||
(if (assq processing-type org-preview-latex-process-alist)
|
|
||||||
(org-create-latex-preview
|
|
||||||
(concat org-preview-latex-image-directory "org-ltximg")
|
|
||||||
beg end dir 'overlay 'forbuffer processing-type
|
|
||||||
value nil 'checkdir)
|
|
||||||
(error "Unknown conversion process %s for previewing LaTeX fragments"
|
|
||||||
processing-type)))))))))
|
|
||||||
|
|
||||||
(defun org-format-latex
|
(defun org-format-latex
|
||||||
(prefix &optional beg end dir overlays msg forbuffer processing-type)
|
(prefix &optional beg end dir overlays msg forbuffer processing-type)
|
||||||
|
@ -496,63 +494,85 @@ Some of the options can be changed using the variable
|
||||||
(org-latex-preview-fragments processing-type beg end)
|
(org-latex-preview-fragments processing-type beg end)
|
||||||
(org-latex-replace-fragments prefix processing-type dir msg)))
|
(org-latex-replace-fragments prefix processing-type dir msg)))
|
||||||
|
|
||||||
(defun org-create-latex-preview (prefix beg end dir overlays forbuffer processing-type
|
(defun org-create-latex-preview (processing-type element &optional dir)
|
||||||
value block-type checkdir-flag)
|
"Create a preview of the LaTeX math fragment ELEMENT using PROCESSING-TYPE.
|
||||||
"The `org-preview-latex-process-alist' branch of `org-format-latex'."
|
|
||||||
(goto-char beg)
|
The previews are placed in
|
||||||
|
`org-preview-latex-image-directory'/\"org-ltximg\", relative to DIR."
|
||||||
(let* ((processing-info
|
(let* ((processing-info
|
||||||
(cdr (assq processing-type org-preview-latex-process-alist)))
|
(cdr (assq processing-type org-preview-latex-process-alist)))
|
||||||
(face (face-at-point))
|
(beg (org-element-property :begin element))
|
||||||
;; Get the colors from the face at point.
|
(end (save-excursion
|
||||||
(fg
|
(goto-char (org-element-property :end element))
|
||||||
(let ((color (plist-get org-format-latex-options
|
(skip-chars-backward " \r\t\n")
|
||||||
:foreground)))
|
(point)))
|
||||||
(if forbuffer
|
(value (org-element-property :value element))
|
||||||
(cond
|
(face (save-excursion
|
||||||
((eq color 'auto)
|
(goto-char beg)
|
||||||
(face-attribute face :foreground nil 'default))
|
(face-at-point)))
|
||||||
((eq color 'default)
|
(fg (pcase (plist-get org-format-latex-options :foreground)
|
||||||
(face-attribute 'default :foreground nil))
|
('auto (face-attribute face :foreground nil 'default))
|
||||||
(t color))
|
('default (face-attribute 'default :foreground nil))
|
||||||
color)))
|
(color color)))
|
||||||
(bg
|
(bg (pcase (plist-get org-format-latex-options :background)
|
||||||
(let ((color (plist-get org-format-latex-options
|
('auto (face-attribute face :background nil 'default))
|
||||||
:background)))
|
('default (face-attribute 'default :background nil))
|
||||||
(if forbuffer
|
(color color)))
|
||||||
(cond
|
|
||||||
((eq color 'auto)
|
|
||||||
(face-attribute face :background nil 'default))
|
|
||||||
((eq color 'default)
|
|
||||||
(face-attribute 'default :background nil))
|
|
||||||
(t color))
|
|
||||||
color)))
|
|
||||||
(hash (sha1 (prin1-to-string
|
(hash (sha1 (prin1-to-string
|
||||||
(list org-format-latex-header
|
(list org-format-latex-header
|
||||||
org-latex-default-packages-alist
|
org-latex-default-packages-alist
|
||||||
org-latex-packages-alist
|
org-latex-packages-alist
|
||||||
org-format-latex-options
|
org-format-latex-options
|
||||||
forbuffer value fg bg))))
|
'preview value fg bg))))
|
||||||
|
(imagetype (or (plist-get processing-info :image-output-type) "png"))
|
||||||
|
(absprefix (expand-file-name
|
||||||
|
(concat org-preview-latex-image-directory "org-ltximg")
|
||||||
|
dir))
|
||||||
|
(movefile (format "%s_%s.%s" absprefix hash imagetype))
|
||||||
|
(options (org-combine-plists
|
||||||
|
org-format-latex-options
|
||||||
|
(list :foreground fg :background bg))))
|
||||||
|
(unless (file-exists-p movefile)
|
||||||
|
(org-create-formula-image
|
||||||
|
value movefile options 'forbuffer processing-type))
|
||||||
|
(org-place-latex-image beg end movefile imagetype)))
|
||||||
|
|
||||||
|
(defun org-create-latex-export (processing-type element prefix dir &optional block-type)
|
||||||
|
"Create a export of the LaTeX math fragment ELEMENT using PROCESSING-TYPE.
|
||||||
|
|
||||||
|
Generated image files are placed in DIR with the prefix PREFIX. Note
|
||||||
|
that PREFIX may itself contain a directory path component.
|
||||||
|
|
||||||
|
BLOCK-TYPE determines whether the result is placed inline or as a paragraph."
|
||||||
|
(let* ((processing-info
|
||||||
|
(cdr (assq processing-type org-preview-latex-process-alist)))
|
||||||
|
(beg (org-element-property :begin element))
|
||||||
|
(end (save-excursion
|
||||||
|
(goto-char (org-element-property :end element))
|
||||||
|
(skip-chars-backward " \r\t\n")
|
||||||
|
(point)))
|
||||||
|
(value (org-element-property :value element))
|
||||||
|
(fg (plist-get org-format-latex-options :foreground))
|
||||||
|
(bg (plist-get org-format-latex-options :background))
|
||||||
|
(hash (sha1 (prin1-to-string
|
||||||
|
(list org-format-latex-header
|
||||||
|
org-latex-default-packages-alist
|
||||||
|
org-latex-packages-alist
|
||||||
|
org-format-latex-options
|
||||||
|
'export value fg bg))))
|
||||||
(imagetype (or (plist-get processing-info :image-output-type) "png"))
|
(imagetype (or (plist-get processing-info :image-output-type) "png"))
|
||||||
(absprefix (expand-file-name prefix dir))
|
(absprefix (expand-file-name prefix dir))
|
||||||
(linkfile (format "%s_%s.%s" prefix hash imagetype))
|
(linkfile (format "%s_%s.%s" prefix hash imagetype))
|
||||||
(movefile (format "%s_%s.%s" absprefix hash imagetype))
|
(movefile (format "%s_%s.%s" absprefix hash imagetype))
|
||||||
(sep (and block-type "\n\n"))
|
(sep (and block-type "\n\n"))
|
||||||
(link (concat sep "[[file:" linkfile "]]" sep))
|
(link (concat sep "[[file:" linkfile "]]" sep))
|
||||||
(options
|
(options (org-combine-plists
|
||||||
(org-combine-plists
|
org-format-latex-options
|
||||||
org-format-latex-options
|
(list :foreground fg :background bg))))
|
||||||
`(:foreground ,fg :background ,bg))))
|
|
||||||
(unless checkdir-flag ; Ensure the directory exists.
|
|
||||||
(setq checkdir-flag t)
|
|
||||||
(let ((todir (file-name-directory absprefix)))
|
|
||||||
(unless (file-directory-p todir)
|
|
||||||
(make-directory todir t))))
|
|
||||||
(unless (file-exists-p movefile)
|
(unless (file-exists-p movefile)
|
||||||
(org-create-formula-image
|
(org-create-formula-image
|
||||||
value movefile options forbuffer processing-type))
|
value movefile options nil processing-type))
|
||||||
(if overlays
|
(org-place-latex-image-link link block-type beg end value)))
|
||||||
(org-place-latex-image beg end movefile imagetype)
|
|
||||||
(org-place-latex-image-link link block-type beg end value))))
|
|
||||||
|
|
||||||
(defun org-place-latex-image (beg end movefile imagetype)
|
(defun org-place-latex-image (beg end movefile imagetype)
|
||||||
"Place an overlay from BEG to END showing MOVEFILE.
|
"Place an overlay from BEG to END showing MOVEFILE.
|
||||||
|
|
Loading…
Reference in New Issue