Emacs 如何在组织模式下重新生成乳胶碎片?

Emacs 如何在组织模式下重新生成乳胶碎片?,emacs,spacemacs,Emacs,Spacemacs,我有组织模式下的latex片段,它们是用我以前的emacs主题生成的,现在我切换了主题,旧的latex片段仍然有我的旧背景色,而不是新的背景色。如何清除它们并重新生成它们(linux)?C-C-x C-l绑定到org。执行一次以删除覆盖,然后再次执行以重新生成覆盖。根据您在缓冲区中的位置,以及是否使用一个C-u或两个C-u或无C-u调用它,它将执行不同的操作(影响当前latex片段、子树中的所有片段或缓冲区中的所有片段)。您应该使用 C-h C-f org-toggle-latex-fragme

我有组织模式下的latex片段,它们是用我以前的emacs主题生成的,现在我切换了主题,旧的latex片段仍然有我的旧背景色,而不是新的背景色。如何清除它们并重新生成它们(linux)?

C-C-x C-l
绑定到
org
。执行一次以删除覆盖,然后再次执行以重新生成覆盖。根据您在缓冲区中的位置,以及是否使用一个
C-u
或两个
C-u
或无
C-u
调用它,它将执行不同的操作(影响当前latex片段、子树中的所有片段或缓冲区中的所有片段)。您应该使用

C-h C-f org-toggle-latex-fragment RET

latex片段存储在名为“ltximg”的文件夹中,该文件夹与org文件所在的文件夹相同。若要重新创建片段,请删除该文件夹,重新启动emacs并再次创建片段。

下面是一个解决方案,它将在您调用
加载主题时自动更改缓存文件夹。它还将更新图像。为了避免不必要的操作,这只在调用了
org
的缓冲区中进行

加载新主题后,将为整个缓冲区计算LaTeX片段,但您可以在下面的最后一个函数中删除
”(16)
,这样就不会发生。取而代之的是,只更新当前部分(只删除缓冲区其余部分中的latex图像)

确保将您的latex片段选项转移到
my/org latex set options
。这是因为如果您使用
#+STARTUP:latexpreview
,将这些选项保留在
组织模式挂钩内将不起作用

(defun my/org-latex-set-options ()
  (setq org-format-latex-options (plist-put org-format-latex-options :scale 1.5)))

(defvar my/org-latex-toggle-fragment-has-been-called nil
  "Tracks if org-toggle-latex-fragment has ever been called (updated locally).")

(defadvice org-toggle-latex-fragment (before my/latex-fragments-advice activate)
  "Keep Org LaTeX fragments in a directory with background color name."
  (if (not my/org-latex-toggle-fragment-has-been-called) (my/org-latex-set-options))
  (setq-local my/org-latex-toggle-fragment-has-been-called t)
  (my/org-latex-set-directory-name-to-background))

(defadvice load-theme (after my/load-theme-advice-for-latex activate)
  "Conditionally update Org LaTeX fragments for current background."
  (if my/org-latex-toggle-fragment-has-been-called (my/org-latex-update-fragments-for-background)))

(defadvice disable-theme (after my/disable-theme-advice-for-latex activate)
  "Conditionally update Org LaTeX fragments for current background."
  (if my/org-latex-toggle-fragment-has-been-called (my/org-latex-update-fragments-for-background)))

(defun my/org-latex-set-directory-name-to-background ()
  "Set Org LaTeX directory name to background color name: c_Red_Green_Blue."
  (setq org-preview-latex-image-directory
        (concat "ltximg/c"
                (let ((color (color-values (alist-get 'background-color (frame-parameters)))))
                  (apply 'concat (mapcar (lambda (x) (concat "_" x)) (mapcar 'int-to-string color))))
                "/")))

(defun my/org-latex-update-fragments-for-background ()
  "Remove Org LaTeX fragment layout, switch directory for background, turn fragments back on."
  ;; removes latex overlays in the whole buffer
  (org-remove-latex-fragment-image-overlays)

  ;; background directory switch
  (my/org-latex-set-directory-name-to-background)

  ;; recreate overlay
  ;; Argument '(16) is same as prefix C-u C-u,
  ;; means create images in the whole buffer instead of just the current section.
  ;; For many new images this will take time.
  (org-toggle-latex-fragment '(16)))

我正在使用Doom Emacs,我的预览缓存在以下目录中:

~/.emacs.d/.local/cache/org-latex/

我需要删除文件夹,以确保使用新的前景色重新生成预览。

不,这不会重新创建预览,只需打开/关闭它们,图像可能会缓存在某个地方,但我不知道在哪里。它们位于当前目录的
ltxpng
sudbdirectory中。呃,可能不是(这可能取决于您正在运行的组织模式的版本):在9.0.5中,我看到的目录是
ltximg
。除此之外,您还可以在Doom Emacs中自动切换以下颜色。