Nikola orgmode 图片显示
作为一个emacser,写博客不用orgmode怎么说得过去。Nikola自带orgmode插件,算是一个优点。但是有一个问题——在orgmode中显示得好好的行内图片,导出到博客就看不到了。这怎么能行,开始折腾!
设置org-download-image-dir
我使用org-download这个插件来向orgmode buffer中插入图片。所以,首先想到的是修改图片的保存路径,可以通过修改org-download-image-dir
这个变量的值来实现。而且我想让修改对所有帖子都生效,可以通过设置dir-local变量来实现这一点。在posts/
目录下添加文件.dir-locals.el
,内容如下:
;;; Directory Local Variables
;;; For more information see (info "(emacs) Directory Variables")
((org-mode . ((org-download-image-dir . "../images"))))
这样,通过org-download插入的行内图片会自动放入/images
目录下。Cool!但是导出成
html以后的路径并不正确,还需要以下步骤。
在导出时修改图片链接格式
因为nikola的orgmode插件实际上仍然是基于orgmode的html导出功能,所以我们在最后导出时修改图片链接为nikola orgmode插件的自定义链接格式即可。
;; fix image links in a nikola post
(defun my-fix-image-links (backend)
(when (eq backend 'html)
(save-excursion
(goto-char (point-min))
(while (search-forward-regexp "\\[\\[\\(?:file:\\)*\\.\\./images/" nil t)
(replace-match "[[img-url:/images/"))
))
)
(add-hook 'org-export-before-parsing-hook #'my-fix-image-links)
然后,将这段代码放入/plugins/orgmode/conf.el
文件中。好了,试试看图片现在能不能显示(没错,其实就是想秀一下桌面 :grinning:)
[Bonus] 修改图片存放位置
现在图片存放的路径看起来是这样的
../images/
└── zai_dao_chu_shi_xiu_gai_tu_pian_lu_jing
└── 2020-12-12_17-39-08_screenshot.png
2 directories, 1 file
图片路径是这样的:../images/一级标题/图片文件.png
,虽然并不影响使用,但是我想要把它改成这样的:../images/org文件名/一级标题/图片文件.png
。可以通过advise
org-download-dir-1
这个函数来实现这一点。
(defun org-download--dir-1-advice (orig-func)
(mapconcat 'identity
(list (or org-download-image-dir ".")
(file-name-sans-extension (file-name-nondirectory buffer-file-name)))
"/"))
(advice-add #'org-download--dir-1 :around #'org-download--dir-1-advice)
将这段代码也放入.dir-locals.el
文件中,现在它看起来是这样的:
;;; Directory Local Variables
;;; For more information see (info "(emacs) Directory Variables")
((org-mode . ((eval . (progn
(defun org-download--dir-1-advice (orig-func)
(mapconcat 'identity
(list
(or org-download-image-dir ".")
(file-name-sans-extension
(file-name-nondirectory buffer-file-name)))
"/"))
(advice-add #'org-download--dir-1 :around #'org-download--dir-1-advice)))
(org-download-image-dir . "../images"))))
这样每次插入图片就会自动放到我想要的位置:
../images/
└── nikola-orgmode-tu-pian-xian-shi
└── zai_dao_chu_shi_xiu_gai_tu_pian_lu_jing
└── 2020-12-12_17-39-08_screenshot.png
2 directories, 1 file