我正在尝试使用嵌入式图像(例如,用于通过gnuplot绘制数据),并且有一个问题:图像始终默认为 links 插入。我需要做一些按键操作,以“强制” emacs内嵌显示实际图像,而不仅仅是文件链接。
例如我从gnuplot代码开始:
#+BEGIN_SRC gnuplot :file plot.png
plot sin(x)
#+END_SRC
当我在此代码块上按C-c C-c
时,它将运行,并显示结果作为指向图像文件的链接:
#+RESULTS:
[[file:plot.png]]
C-c C-x C-v
(org-toggle-inline-images),则链接会被替换为内嵌图像M-x org-redisplay-inline-images
,则链接确实被图片替换了(org-display-inline-images t t)
,则会显示图像,依此类推(这些选项来自Emacs org-display-inline-images和Inline images in org-mode问题)
但是我不想按任何特殊的操作:默认情况下,我希望图像以嵌入式方式显示。我发现并尝试了以下变量:
(setq org-startup-with-inline-images t)
在.emacs
配置中#+STARTUP: inlineimages
标头(setq org-display-inline-images t)
但是没有一个让我得到我想要的行为。我很困惑-我想要一些不自然的东西吗?
P.S。我想在MacOS X上使用GNU Emacs v26.1,组织模式为v9.1.9-65
P.P.S。尽管这似乎是我的emacs / orgmode版本中的一个错误,并且尚未报告,但与此同时,我发现了以下技巧:(add-hook 'org-babel-after-execute-hook 'org-display-inline-images 'append)
(感谢ob-ipython作者)–它已修复现在为我发行。也许对其他人有用
答案 0 :(得分:1)
@Tobias 是最好的答案。我已经调整了@Tobias 代码以通过将重新显示绑定到当前子树并将 REFRESH 参数设置为 t 以仅在必要时重新显示来进一步优化。
(require 'subr-x)
(defun org+-babel-after-execute ()
"Redisplay inline images in subtree if cursor in source block with :result graphics."
(when (org-in-src-block-p)
(let (beg end)
(save-excursion
(org-mark-subtree)
(setq beg (point))
(setq end (mark)))
(when-let ((info (org-babel-get-src-block-info t))
(params (org-babel-process-params (nth 2 info)))
(result-params (cdr (assq :result-params params)))
((member "graphics" result-params)))
(org-display-inline-images nil t beg end)))))
(add-hook 'org-babel-after-execute-hook #'org+-babel-after-execute)
答案 1 :(得分:0)
我可以通过以下方式重现该问题:
Org mode version 9.1.9 (release_9.1.9-65-g5e4542 @ /home/xyz/.emacs.d/elpa/org-plus-contrib-20190415/)
复制:
emacs -Q
启动Emacs 26.3。load-library
RET org
RET Gnuplot
将org-babel-load-languages
添加到customize-option
。gnuplot.el
#+STARTUP: inlineimages
Some text.
#+BEGIN_SRC gnuplot :file plot.png :results graphics
plot sin(x)
#+END_SRC
我有与您在问题中建议的解决方案类似的解决方案,但有更多区别。
在大型组织文档中重新显示图像可能需要一些时间。因此,只有在源块具有结果参数graphics
时,我才这样做:
(require 'subr-x)
(defun org+-babel-after-execute ()
"Redisplay inline images after executing source blocks with graphics results."
(when-let ((info (org-babel-get-src-block-info t))
(params (org-babel-process-params (nth 2 info)))
(result-params (cdr (assq :result-params params)))
((member "graphics" result-params)))
(org-display-inline-images)))
(add-hook 'org-babel-after-execute-hook #'org+-babel-after-execute)