理解org-mode makeindex发布参数
Emacs是“神的编辑器”,而org-mode则是让很多人选择Emacs的主要原动力——通过org-mode可以非常方便的搭建起个人的GTD体系。有关org-mode的介绍很多,有兴趣的朋友可以自行检索。由于中文资源的缺乏,org-mode的“:makeindex”发布参数让人迷惑。本文对makeindex发布参数的使用进行了一些初步的分析和解释
org-mode可以将书写完成的org文件发布为HTML、docbook等多种格式。在发布为HTML文件时,根据org-mode的手册,可以检索所有org文件,自动生成“index”。 通过阅读org-mode源代码,我发现这里的“Index”不是产生通常意义上所说的网站首页文件(index.html)。而是一种“概念定义”的索引。这相当于自动生成科技文献在文档结尾处专门罗列的“关键字”(keyword)的列表。
1 产生索引列表的方法
要生成相应的索引列表,在书写org文件的时候需要使用一些特殊的写法:在org文件适当的位置,添加#+Index声明。例如:
* 如何使用Brush工具 #+index: Brush #+index: Photoshop! Brush Protoshop中的Brush工具是...
为了生成索引列表,在发布配置中,需要在'org-publish-project-alist'中打开相应的配置选项,例如:
(setq org-publish-project-alist '(("orgfile" :base-directory "~/org.src/" :base-extension "org" :publishing-directory "~/org.html/" :publishing-function org-publish-org-to-html :recursive t :makeindex t) ("website" :components ("orgfile"))))
2 当前org-mode在产生索引列表时存在的问题和应急解决方法
目前的org-mode在自动生成索引列表时,针对中文的实现还存在一些缺陷,目前我暂时还没有发现仅仅通过配置就可以解决问题的方法。这些缺陷主要体现在:
- 在第一次生成索引列表文件(theindex.org)时,发布的HTML文件会使用"iso-8859-1"字符集。这将导致发布得到的theindex.html文件的中文由于字符集问题而显示为乱码。
- 生成的索引列表将按照英文首字母进行归类。如果定义的是中文关键字,则会以第一个汉字来作为分类规则进行归类。
解决上门的问题,目前除了修改源代码的方式外,目前我还没有找到通过配置解决的手段。在不修改源代码的情况下,变通的解决方法是:
针对问题一,在第一次生成索引列表文件(theindex.org)后,编辑该文件,为该文件设置含有中文的标题,例如:
;;将文档标题设置为“关键词列表” #+title: 关键词列表
在重新发布文件后,会发现theindex.html已经可以使用正常的字符集了。
针对问题二,目前暂时没有好的解决方案。只能通过定义英文关键字,或在对应中文关键字前添加对应汉语拼音的首字母来解决。
上面的解决方案都是相对变通的解决方法。要彻底解决,就需要对org进行源代码的修改。期待在org未来的版本中能够得以解决。
附录:进行如上配置后,生成的索引列表如下图(借用了网上大拿的CSS,多谢哈!!)