ZMonster's Blog 巧者劳而智者忧,无能者无所求,饱食而遨游,泛若不系之舟

使用ox-freemind将org-mode文档导出成思维导图

思维导图

思维导图是一个很好地整理知识、表达思维的工具。因为使用Linux,我更经常使用Freemind这么一个开源的思维导图工具。

Free_Mind.png

Freemind本身也是一款很优秀的软件,它能够将思维导图导出成html、flah、Java Applet、Open Office文档以及PNG和JPEG两种格式的图片,并且对思维导图的绘制提供的快捷键。

这里 是Freemind的官网。

我曾经用Freemind绘制过一张Emacs的思维导图,放到了百度的emacs贴吧里,受到了一些Emacs新手的欢迎。因为那张图存在一定的错误,于是后来我决定重新画一张,而且决心要将更全面的内容表达出来。这是个非常累人的活,我断断续续用了一天时间才完成。

老实说Freemind已经很方便了,在熟悉了相关快捷键后,能够很高效地进行思维导图的绘制。

不过我希望能在更熟悉的环境中来做这件事情,我希望不用再去学习另外一套操作方式,而是能在org-mode中来绘制思维导图。

我的Org版本是8.2.3c,这个版本的org-mode中提供了ox-freemind.el来满足我这个要求。

使用ox-freemind.el

所有Org的核心模块都在 org/lisp/ 目录下,但这个插件并不是Org的核心模块,它被放置在 org/contrib/lisp 目录下,如果您没有在Emacs配置文件中将这个路径加入加载路径,那么先做好这件事,然后在配置文件中添加:

(require 'ox-freemind)

然后就可以使用 org-freemind-export-to-freemind 来将Org文档导出成Freemind文档了。

如,我新建了一个文件 mind.org ,内容如下

#+TITLE: Org-mode
** 写文档
** 发布成html
** org-bable
** 表格

执行 org-freemind-export-to-freemind 并用Freemind打开导出成图像后,得到的结果是:

mind.png

生成的思维导图样式是在ox-freemind.el中的变量 org-freemind-styles 中定义的。

ox-freemind.el中的bug

如果您使用和我一样版本的Org-mode,那么很可能会遇到和我一样的问题。在执行 org-freemind-styles 后出错,出错信息为:

org-freemind-export-to-freemind: Symbol's function definition is void: \,

最后我在Org-mode的邮件列表中找到了解决方法。原链接在此

出错的原因是 org-freemind-export-to-freemind 函数的定义中有一处错误。其原始内容为:

1: (defun org-freemind-export-to-freemind
2:   (&optional async subtreep visible-only body-only ext-plist)
3:     (interactive)
4:   (let* ((extension (concat ".mm" ))
5:          (file (org-export-output-file-name extension subtreep))
6:          (org-export-coding-system 'utf-8))
7:     (org-export-to-file 'freemind ,file
8:     async subtreep visible-only body-only ext-plist)))

将倒数第二行中的

org-export-to-file 'freemind ,file

修改为

org-export-to-file 'freemind file

嗯,没错,作者多写了一个逗号。