在Emacs中预览Markdown
需求
配置好Emacs的markdown模式后,就可以通过快捷键预览markdown文本对应的网页,配置和使用方法可参考Markdown Mode for Emacs。
但前提是,系统中要有将markdown文本转化为HTML文本的命令。否则,按下预览网页的快捷键后,Emacs将提示/bin/bash: markdown: command not found
。我找到了两种办法来解决这个问题。
markdown_py
Python有将markdown转化为HTML的命令,只不过它的名字不叫markdown。我通过locate
命令找到了它:
1 | $ sudo updatedb |
随便找个markdown文件,尝试下markdown_py
命令的效果:
1 | $ markdown_py file.md > result |
打开result文件,发现它就是一个HTML文本,所以这就是符合我们要求的命令。查看一下文件的信息:
1 | $ ll /usr/bin | grep markdown |
原来markdown_py
就是markdown_py-2.7
的一个软链接。所以,我们再建立一个名为markdown
的软链接指向markdown_py-2.7
就可以解决问题了:
1 | $ cd /usr/bin |
敲下C-c C-c p
快捷键看效果,发现网页是乱码的。如果markdown的内容是中文,那么转换出来的HTML在浏览器中打开就无法自动识别编码。这个时候,我们可以借助markdown对HTML标记的支持,在markdown文件开头中加入编码信息:
1 | $ sed -i '1i\<meta http-equiv="content-type" content="text/html; charset=UTF-8">' *.md |
我最开始使用的就是这个方法,虽然奏效了,但是每个markdown文本中都要加这行代码,大煞风景。有没有更优雅的解决办法呢?于是,我找到了pandoc工具。
pandoc
pandoc支持多种输出格式,我们现在只关注HTML格式。pandoc将Markdown转化为HTML并将结果定向到标准输出:
1 | $ pandoc -f markdown -t html file.md |
为了防止中文乱码,要加上--ascii
选项。pandoc还支持语法高亮和LaTeX数学公式。加上--highlight-stype pygments
选项使用pygments支持语法高亮,加上--mathjax
选项以支持LaTeX数学公式。得到的最终形式是:
1 | $ pandoc -f markdown -t html -s --mathjax --highlight-style pygments file.md |
但是,如何让Emacs调用这个带很多选项的命令呢?这时候就要用到shell的知识了。在shell中,$1
代表第一个命令行参数,我们将上述语句中最后的文件名替换成$1
,然后把它封装成一个名为markdown的文本:
1 | pandoc -f markdown -t html -s --mathjax --highlight-style pygments $1 |
为了直接在命令行中调用它,可将它移动到命令目录中,并增加可执行权限。现在,执行markdown file.md
语句的效果与执行
1 | $ pandoc -f markdown -t html -s --mathjax --highlight-style pygments file.md |
的效果是一样的,目的达到,最终的预览效果也非常好。