Org-mode, Jekyll和IPython

很久以前我就知道Emacs和Org-mode了,但也就是好奇了解下,没有认真地用过。最近看了两个关于如何使研究可重现的视频,org-mode for Reproducible ResearchEmacs + org-mode + python in reproducible research,深感org的强大,于是开始走上了emacs和org的不归路(误)。在这里记录一下我是怎样设置org-mode的。

设置Org-mode

google一下之后我找到了org-jekyll-mode。 作者博客已经把配置写得很清楚了,设置好几 个环境变量之后就可以开始写。但是可能因为emacs和org-mode版本不同,我export的时候 会报错。debug后发现是必须把四个关于目录的环境变量设置好才能顺利导出:

(setq org-jekyll/jekyll-project-root "~/src/semio.github.io/")
(setq org-jekyll/org-mode-project-root "~/src/org/blog/")
(setq org-jekyll/org-mode-static-files-folder-name "assets")
(setq org-jekyll/jekyll-static-folder-name "assets")

除此之外插件的脚本还有一些小修改才符合我的使用需要,我把我用的脚本放到了 gist 上。如果不想用这个插件,还可以参考org-mode官网的文档 来做。不过我没尝试过官 网的方法,不知道能不能很好地处理图片等外部文件。

ipython代码块

如果你和我一样经常用ipython notebook,那么你也可以尝试下把你的notebook内容保存成 Org格式。这样做的好处主要是:

  • ipython notebook的文件难以维护,而org-mode是纯文本
  • org-mode能够不仅能运行ipython,现阶段支持的语言比ipython多,免去写其他kernel的麻烦
  • org-mode下是用Emacs来编辑代码,编辑功能比ipython notebook

要在org-mode下用ipython src block,需要安装ob-ipython 插件。然后就可以按org-mode 的代码块格式来用了:

#+BEGIN_SRC ipython :session
  source code here...
#+END_SRC

最后看看代码高亮和图片。。

%matplotlib inline
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style('white')
sns.set_context('notebook')

nums = stats.norm.rvs(size=1000)
plt.hist(nums, bins=50, histtype='stepfilled', alpha=.75)

ipython-example.png

以上。