一鳞半甲

醉心、探索与收获
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

理解org-mode makeindex发布参数

Posted on 2012-09-27 15:33  麦满屯  阅读(1134)  评论(0编辑  收藏  举报

理解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在自动生成索引列表时,针对中文的实现还存在一些缺陷,目前我暂时还没有发现仅仅通过配置就可以解决问题的方法。这些缺陷主要体现在:

  1. 在第一次生成索引列表文件(theindex.org)时,发布的HTML文件会使用"iso-8859-1"字符集。这将导致发布得到的theindex.html文件的中文由于字符集问题而显示为乱码。
  2. 生成的索引列表将按照英文首字母进行归类。如果定义的是中文关键字,则会以第一个汉字来作为分类规则进行归类。

解决上门的问题,目前除了修改源代码的方式外,目前我还没有找到通过配置解决的手段。在不修改源代码的情况下,变通的解决方法是:

针对问题一,在第一次生成索引列表文件(theindex.org)后,编辑该文件,为该文件设置含有中文的标题,例如:

    ;;将文档标题设置为“关键词列表”
    #+title: 关键词列表

在重新发布文件后,会发现theindex.html已经可以使用正常的字符集了。

针对问题二,目前暂时没有好的解决方案。只能通过定义英文关键字,或在对应中文关键字前添加对应汉语拼音的首字母来解决。

上面的解决方案都是相对变通的解决方法。要彻底解决,就需要对org进行源代码的修改。期待在org未来的版本中能够得以解决。

附录:进行如上配置后,生成的索引列表如下图(借用了网上大拿的CSS,多谢哈!!)