在Org Mode中插入和使用图片
源起
在使用orgmode作为任务管理的工具之后,逐渐开始膨胀,关键是文本折叠和缩进的功能实在太好用,导致想让orgmode完成更多的事情。无论是用于hugo的编辑工具还是作为笔记的主力,插入图片都是绕不过去的问题。
但是由于emacs天生就是geek使用的,而geek通常都是使用linux的,因此图片的插入和显示变得异常困难。
orgmode原有一个inline image显示。另外还有一个iimage mode。本文主要讲inline image display。
测试是否可以显示图片
可以运行 (print image-library-alist)
默认在scratch buffer中输入这条命令,然后再 C-j
即可运行这条elisp代码。如碰到无法执行的情况,此时另一种方法是eshell中运行, M-x eshell
后,运行再回车,会显示如下结果:
(print image-library-alist)
((xpm "libxpm.dll" "xpm4.dll" "libXpm-nox4.dll")
(png "libpng16.dll" "libpng16-16.dll")
(tiff "libtiff-5.dll" "libtiff3.dll" "libtiff.dll")
(jpeg "libjpeg-8.dll")
(gif "libgif-7.dll")
(svg "librsvg-2-2.dll")
(gdk-pixbuf "libgdk_pixbuf-2.0-0.dll")
(glib "libglib-2.0-0.dll")
(gobject "libgobject-2.0-0.dll")
(gnutls "libgnutls-30.dll")
(libxml2 "libxml2-2.dll" "libxml2.dll")
(zlib "zlib1.dll" "libz-1.dll")
(lcms2 "liblcms2-2.dll"))
上述会显示出支持图片的类型
也可以运行命令: (image-type-available-p 'jpeg)
来判断是否支持显示jpeg文件,如返回 t
则表示支持,如返回 nil
则表示不支持,参考:https://kelvinh.github.io/blog/2013/03/26/emacs-image-support-on-windows/ 。
如果缺省dll,则需要下载后拷贝到bin文件夹,重启emacs后生效。
另外,如果是全新安装,或正好遇到升级,在下载emacs程序的时候,请选择从“main GNU ftp server”下载,这个链接中的安装包种类更全。找到windows的下载链接后,同一版本的emacs通常会有几个链接,不要选择带“no-deps”字样的,尽管体积可以小100多M(一半)。这样下载的emacs应该默认支持全部图片格式了。
插入图片
本地图片
先列出几种方式,假设在这个org文件同目录下有一个01.jpg。
[[file:01.jpg]]
[[./01.jpg]]
上述两种形式显示的内容是相同的。
当然也可以以链接的形式。
[[file:01.jpg][图片显示1]]
[[./01.jpg][图片显示2]]
我因为是使用hugo来生成图片,也就是你看到的这个网页,显示名称如:“图片显示1”,在生成时将这个图片的title和alt都设为显示图片
外链图片
和本地图片格式基本相同,只是把图片文件路径改为url。
外链示例1
[[http://wx3.sinaimg.cn/mw690/6ee6203cgy1ft3wp3ogijj20d60bljs0.jpg][外链图片示例]]
外链示例2
http://wx3.sinaimg.cn/mw690/6ee6203cgy1ft3wp3ogijj20d60bljs0.jpg]]
在上述的两种形式中,如果使用org mode的htmlize的导出时,第一种仅保留链接,第两种以图片形式展示。
详细外链示例
#+CAPTION: A black cat stalking a spider
#+ATTR_HTML: :alt cat/spider image :title Action!
#+ATTR_HTML: :width 100px
显示图片
你可能会奇怪,即使按照上面的做了,但是图片还是没有显示,只是显示了链接,因为切换到显示inline image,快捷键是 C-c C-x C-v
。
不过外链图片默认是无法在emacs中显示的(通过修改配置文件也是可以实现的),生成html后是会显示的。
如果需要全局开启inline image display需要在配置中加入:
;; Enable inline image when entering org-mode
;; Make sure you have all the necessary DLL for image display
;; Windows ones can be downloaded from: https://sourceforge.net/projects/ezwinports/files/
(defun turn-on-org-show-all-inline-images ()
(org-display-inline-images t t))
(add-hook 'org-mode-hook 'turn-on-org-show-all-inline-images)
其它
插入图片之后,无法直接导出html,运行 C-c C-e h h
后提示:
Please install htmlize from https://github.com/hniksic/emacs-htmlize
。 在这种情况下,需要到melpha中下载htmlize插件。