心智图相关科普。

什么是心智图(Mindmap)?

心智图(Mind Map),又称脑图、心智地图、脑力激荡图、思维导图、灵感触发图、概念地图、树状图、树枝图或思维地图,是一种图像式思维的工具与及一种利用图像式思考辅助工具来表达思维的工具。

心智图是使用一个中央关键词或想法引起形象化的构造和分类的想法; 它用一个中央关键词或想法以辐射线形连接所有的代表字词、想法、任务或其它关联项目的图解方式。它可以利用不同的方式去表现人们的想法,如引题式,可见形象化式,建构系统式和分类式。它是普遍地用作在研究、组织、解决问题和政策制定中。

心智图是一张集中了所有关连资讯的语义网路或认知体系图像。所有关连资讯都是被辐射线形及非线性图解方式接连在一起,以头脑风暴(激发灵感)方法为本去建立一个适当或相关的概念性组织任务框架。但脑力激荡(激发灵感)方法,语义网路 或 认知体系是没有一个既定制式链去互相连接使用,亦即是可以自由相连接使用的。元素是直觉地以概念的重要性而被安排及组织入分组、分支,或区域中。会集知识方法是能够支援现有的记忆,去思考语义的结构资讯。

心智图的用途

我用心智图来…

  1. 做笔记。在阅读的时候,我喜欢同时开着 Docear 画心智图,将这篇文章的大体结构画出来;
  2. 复习、记忆。我喜欢通过画心智图来回顾我一段时间的学习,这通常是在实验室的白板上完成的;
  3. 沟通、组织。和别人合作的时候,我喜欢用心智图表达我的想法,然后发给他看;
  4. 做报告。对于平常的一些不太正式的学术交流,我都是用心智图来整理成报告材料,然后在讲解的时候投影给其他人看;
  5. 写论文。构思论文的结构;
  6. 演讲准备。构思演讲的流程,据此准备课件。

它还可以…

GTD,计划,项目管理,会议,培训,谈判,面试,评估,头脑风暴…

常用的几个心智图工具

Docear

官方网站: http://www.docear.org/

Docear  Docear附图 1 Docear 不仅是一个心智图工具,它更是一个无比强大的科研套件。它完美结合了文件管理器 + 心智图工具 + Jabref + LaTeX 公式编辑。我在试用了它五分钟后,就立马淘汰了之前一直在使用的 XMind 。并且给这个项目打了五颗星:

我的评价
我的评价

Docear 拥有很多非常出色的特性,我准备找时间专门写一篇对它的介绍。这里只贴一张截图,“一图胜千言”,让你先领略一下 Docear 的强大:

Docear Screenshot
Docear Screenshot

XMind

官方网站: http://www.xmind.net/

XMind  XMind附图 2 XMind 是使用Java开发的跨平台心智图工具。XMind 绘制的的心智图、鱼骨图、二维图、树形图、逻辑图、组织结构图等以结构化的方式来展示具体的内容,人们在用XMind绘制图形的时候,可以时刻保持头脑清晰,随时把握计划或任务的全局,它可以帮助人们在学习和工作用提高效率。值得一提的是,它还是中国人开发的。

XMind的优点在于:

  1. 界面美观,操作很人性化,支持多种主题风格,支持导入新的图标,因此画出的心智图要比Freemind美观得多;
  2. 支持插图和附件,商业版本还拥有独特的演示模式;
  3. 大多数功能开源免费提供,只有少数功能商业化(这点很慷慨);
  4. 支持将你的心智图作品同步到XMind的服务器上。

不足:

  1. 商业软件,部分功能收费;
  2. 与Ubuntu的Unity风格界面不太兼容;
  3. 支持导出的格式较少;
  4. 缺乏其他同类工具对它的文件格式的支持。

Freemind

官方网站: http://freemind.sourceforge.net/  Freemind附图 3 Freemind

Freemind 是一个开源的Mindmap工具,在这么多个心智图工具中,它的格式 *.mm 是最受支持的心智图格式,其他很多工具都支持导入这种格式。事实上,如果你用文本编辑器打开 *.mm 文件,你就会发现这个文件其实就是标准的xml格式文件。

Freemind的优点在于:

  1. 完全开源,免费使用;
  2. 生成的文件很小,而且格式最通用;
  3. 支持导出的格式较多。

不足:

  1. 界面比较简陋,操作不是很人性化,绘制的心智图效果难以和XMind比肩;
  2. 不支持附件、插图功能。 VYM附图 4 VYM

VYM

官方网站: http://www.insilmaril.de/vym/

VYM (View your mind)同样也是一款开源的心智图工具,它与Freemind相比的一个优势是可以导出为PostScript代码,另外,借助于Vym2TikZ还可以将VYM的绘图导出为TikZ代码。我使用它也主要是冲着它的这两个特性。

Mind42

官方网站: http://mind42.com/  Mind42附图 5 Mind42

一款在线心智图工具,最大优点是支持 iframe 内嵌,因此可以轻松的将画好的心智图发布到博客上。

Graphviz

Graphviz  Graphviz附图 6 Graphviz 也可以用来绘制心智图,甚至有人拿它做成了一个酷酷的主页(http://zoomquiet.org/)。Graphviz使用的是dot语言,这个语言还是挺简单的,可以看看官方的Gallery

Emacs与心智图

org-mode导出为freemind

Emacs 的 org-mode 可以直接导出为 freemind 格式。按 C-c C-e m 即可。

freemind转为outline文件

如果要将freemind文件转换为 Emacs的 outline-mode文件(org-mode的前身,其格式可以和org-mode兼容), Christian Lemburg写了一个perl脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#!/usr/bin/perl -w
use strict;

use Getopt::Std;
use XML::Simple;
use Data::Dumper qw(Dumper);

# Copyright (c) 2004 Christian Lemburg.
#
# All rights reserved. This program is free software;
# you can redistribute it and/or modify it under the
# same terms as Perl itself.

# usage

my $usage = <<'EOU';

Usage: $0 < freemind.mm > emacs-outline.txt

Options:

h: print help
p: outline mode heading indicator pattern atom (default "*")
s: suppress topic of mind map as title in outline output (default off)

EOU

# setup

my %opts;
getopts('hsp:', \%opts);

die $usage if $opts{h};

my $heading_pattern_atom = $opts{p} || "*";
my $suppress_title = $opts{'s'};

my $QUOTE = """;
my $LESS_THAN = "<";
my $GREATER_THAN = ">";
my $NEWLINE = "&#xa;";

# action

my $xs = new XML::Simple();
my $ref = $xs->XMLin(\*STDIN);

die "Could not find mind map in input" unless exists $ref->{node};

my $start = $ref->{node};
print unquote($start->{TEXT}), "\n\n" unless $suppress_title;

my $level = 0;
process_children($start);

# subs

sub process_node {
my ($node) = @_;
process_node_text($node, $level);
if (not is_leaf($node)) {
process_children($node);
}
}

sub process_children {
my ($node) = @_;
$level++;
if (ref($node->{node}) eq "ARRAY") {
for my $child (@{$node->{node}}) {
process_node($child);
}
} else {
my $child = $node->{node};
process_node($child);
}
$level--;
}

sub process_node_text {
my ($node, $level) = @_;
if (is_paragraph_leaf($node)) {
print unquote($node->{TEXT}), "\n\n";
} else {
print make_heading($level), " ", unquote($node->{TEXT}), "\n\n";
}
}

sub is_leaf {
my ($node) = @_;
return not exists $node->{node};
}

sub is_paragraph_leaf {
my ($node) = @_;
# define: paragraph leaf = leaf with text that contains newlines
return is_leaf($node) && $node->{TEXT} =~ /$NEWLINE/;
}

sub make_heading {
my ($level) = @_;
return $heading_pattern_atom x $level;
}

sub unquote {
my ($s) = @_;
$s =~ s/$QUOTE/"/g;
$s =~ s/$LESS_THAN/</g;
$s =~ s/$GREATER_THAN/>/g;
$s =~ s/$NEWLINE/\n/g;
return $s;
}

用法:将这个脚本保存为 mm2outline.pl 文件,然后复制到freemind文件所在目录,然后使用这条命令:

1
perl mm2outline.pl $0 < freemind.mm > emacs-outline.txt

其中,freemind.mm 为你要转换的freemind文件,emacs-outline.txt为目标文件。$0是转换选项,可以是下面三种之一:

  1. h: 打印帮助
  2. p: 设置 outline mode 的标题格式(默认是"*")
  3. s: 将心智图的topic作为outline的标题 (默认为 off)

LaTeX与心智图

在LaTeX中绘制心智图

要在LaTeX中绘制心智图,效果最好的是使用TikZ来绘制。你可以看看画出来的效果

官方的一段示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
% Author: Till Tantau
% Source: The PGF/TikZ manual
\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{mindmap,trees}
\begin{document}
\pagestyle{empty}
\begin{tikzpicture}
\path[mindmap,concept color=black,text=white]
node[concept] {Computer Science}
[clockwise from=0]
child[concept color=green!50!black] {
node[concept] {practical}
[clockwise from=90]
child { node[concept] {algorithms} }
child { node[concept] {data structures} }
child { node[concept] {pro\-gramming languages} }
child { node[concept] {software engineer\-ing} }
}
child[concept color=blue] {
node[concept] {applied}
[clockwise from=-30]
child { node[concept] {databases} }
child { node[concept] {WWW} }
}
child[concept color=red] { node[concept] {technical} }
child[concept color=orange] { node[concept] {theoretical} };
\end{tikzpicture}\end{document}

其中,"node"的表示个节点,可以在进跟着的中括号里设置颜色。node下面可以有child节点,这些节点是使用顺时针排列的。关于TikZ绘制心智图,更详细的教程可以参考《PGF/TikZ manual》第32章的内容。

如果觉得TikZ代码太复杂,可以先用VYM绘制心智图,然后使用Vym2TikZ转换为TikZ代码,但直接生成的TikZ图案不是很好看,还需要对颜色、节点方向做进一步的微调。

Beamer使用心智图作为outline

在Beamer中使用心智图取代原来乏味的outline可以达到非常有趣的效果。比如我这份课件

设置方法

  1. 首先去掉Beamer自带的outline,即确保你的文档中没有这段内容:

    1
    2
    3
    \begin{frame}{Outline}
    \tableofcontents
    \end{frame}
  2. 使用TikZ为每一章画一张心智图,然后在每一章的开头手动插入这张图。

缺点和思考

比起原来的outline,这种方式缺点还是挺明显的:

  1. 原来的outline是自动生成的,而这种心智图不是自动生成的,需要自己在每一章开头手动引入;
  2. 没有点击跳转功能;
  3. 耦合度太高,需要为每一章都画一份心智图,这样如果有一个节点发生改变,其他所有心智图都要做相应修改。所以建议在做课件前最好是先用XMind等工具把这份课件的整体框架都画好,以免制作课件过程中频繁修改outline。

我还没有解决这几个问题,但应该可以通过更好的代码来实现的。如果你有更好的建议,欢迎联系我

作品示例

手绘系列

  1. 开山祖师 Tony Buzan 所发表的心智图作品《蜂的技巧》(查看图片
  2. 我的一些笔记(查看图片
  3. 白板和心智图是一对绝配(查看图片

工具绘图系列

  1. 为一个演讲画的心智图(查看图片
  2. 我用TikZ画的心智图(查看图片)
  3. 心智图小人(查看图片)
  4. 在Mind42发布的一份心智图:软件工程方法学相关知识体系(查看图片

Comments