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

在Org-mode中显示特殊字符

在Org-mode中编写数学公式

在Org-mode中可以编写符合Latex语法的数学符号及公式,并且在发布成网页时以易读的形式展示。

比如下面这段语句:

$$e^{i\pi} + 1 = 0$$

会显示成: \[e^{i\pi} + 1 = 0\]

要启用这个功能,需要在发布成网页时在模板头部中包含:

<script type="text/javascript" src="http://orgmode.org/mathjax/MathJax.js"></script>
<script type="text/javascript">
  <!--/*--><![CDATA[/*><!--*/
    MathJax.Hub.Config({
        // Only one of the two following lines, depending on user settings
        // First allows browser-native MathML display, second forces HTML/CSS
        //  config: ["MMLorHTML.js"], jax: ["input/TeX"],
            jax: ["input/TeX", "output/HTML-CSS"],
        extensions: ["tex2jax.js","TeX/AMSmath.js","TeX/AMSsymbols.js",
                     "TeX/noUndefined.js"],
        tex2jax: {
            inlineMath: [ ["\\(","\\)"] ],
            displayMath: [ ['$$','$$'], ["\\[","\\]"], ["\\begin{displaymath}","\\end{displaymath}"] ],
            skipTags: ["script","noscript","style","textarea","pre","code"],
            ignoreClass: "tex2jax_ignore",
            processEscapes: false,
            processEnvironments: true,
            preview: "TeX"
        },
        showProcessingMessages: true,
        displayAlign: "center",
        displayIndent: "2em",

        "HTML-CSS": {
             scale: 100,
             availableFonts: ["STIX","TeX"],
             preferredFont: "TeX",
             webFont: "TeX",
             imageFont: "TeX",
             showMathMenu: true,
        },
        MMLorHTML: {
             prefer: {
                 MSIE:    "MML",
                 Firefox: "MML",
                 Opera:   "HTML",
                 other:   "HTML"
             }
        }
    });
/*]]>*///-->
</script>

在将单个org-mode文档导出成网页时,模板中时默认有此内容的,可以不用进行特别的设置。不过在将一个目录作为项目发布成网页时,出于简洁的目的,可能会有如下设置:

(setq org-publish-project-alist
      '(
        ("blog-org"
         ...
         :html-head-include-scripts nil
         ...)
        ...))

这条语句会使项目在发布时去除默认模板中包含的一些js片段,这是需要注意的地方。如果需要在项目发布中也启用数学符号/公式显示的功能,最好将这个选项打开,或者自定义也可以(但应该包含上面所示的js片段)

所见即所得:在org-mode中即时显示特殊字符、数学公式

其实在org-mode文档中也能在编辑好特殊字符、数学符号及公式后即时地显示,实现真正的“所见即所得”。

临时启用这个特性,只要在编辑org文档时执行:

C-c C-x \

这个快捷键会调用命令:

org-toggle-pretty-entities

效果如下:

org-pretty-entities.gif

不过效果并不是非常好,和Texmacs还有区别。对于单个的特殊字符如希腊字母,效果是可以的,但对于一些复杂的数学公式,比如

$$J(\theta) = \frac{1}{2m}\sum_{i=1}^{m}(\theta^{T}X_{i} - Y_{i})^2$$

理想的显示效果应该是: \[J(\theta) = \frac{1}{2m}\sum_{i=1}^{m}(\theta^{T}X_{i} - Y_{i})^2\]

但它的实际显示效果却是:

actually-pretty-entities.png

可以看出org-mode的这个功能中对特殊字符的解析和Latex的语法并不一致,至于是否存在解决办法,这个就有待以后讨论吧。