简介
引用 EmacsWiki 上的一句话来说:
Emacs Muse is an authoring and publishing environment for Emacs. It simplifies the process of writing documents and publishing them to various output formats (HTML, PDF, DocBook, LaTeX, and more).
用 Muse 来写笔记是非常方便的,简易方便又实用的语法规则,并且在 Emacs 里
面能够达到一定的``所见即所得''的效果,可以输出为 TeX 、 pdf 、 html 等
多种格式。固然,他的简易的语法不能像 html 那样的灵活性,也不会有LaTeX
那么强大,但是关键的地方是他的易用性,对于日常的笔记工作,不会有太多的
复杂的要求,用 Muse 来完成是最合适不过的了!而且,Muse 还提供了一个
<literal>
标签,里面的东西是不归 Muse 来解释,而由输出后的文档格式来解
释。例如,现在 Muse 对表格的支持还很有限,你可以通过在 <literal>
标签里
面插入 html 表格的办法来产生复杂的表格,你也可以在 <literal>
标签里面输
入 TeX 格式的数学公式,这样产生的 TeX 或者 pdf 文档也是可以有漂亮的数学
公式的。
总之, Muse 为你省去了平日重复输入繁琐的 html 标签或者 LaTeX 命令的工
作,为你提供了一个清爽的环境,同时又不失灵活性,可以在必要的时候使用输
出格式所专有的语法1。它甚至有一个 <lisp>
标签可以嵌入 Elisp 执行的结
果!
输出格式定制
我一般是把自己的笔记输出为 html 格式,这样就得弄一些漂亮的 css 属性, 于是在学习 css 的过程中我慢慢收集了一些实用的小技巧,以把自己的笔记妆 点得漂亮一点。 :)
不过 Muse 由于支持多种格式,所以目前很多功能还不如 emacs-wiki ,比如 fancy table 功能,以及格式化源代码的功能。我模仿 emacs-wiki 里面的扩展 弄了一个 src-tag 功能,使用就像 emacs-wiki 里面那样方便,不过这只是针 对 html 一类的输出格式有用而已。
另外,Muse 还借鉴了 latex2png.el 在 html 输出格式中可以嵌入 latex 的公 式。在这里有介绍和我的配置。
编辑技巧
结构化显示
如果是一个比较大的 Muse 文档的话,结构会越来越不清楚,定位也会有困难,
这个时候可以打开 outline-minor-mode ,可以只显示一个骨干结构或者是只显
示某个部分,结构非常清晰,编辑也非常方便。在把 TAB
键绑定到 org-cycle
就更加方便了。
另外,默认在 muse-mode
里面识别 outline 标题的正则表达式是 "\\*+"
,这
有时候会识别错误,因为在 Muse 里面 *
还可以用于表示强调,如果强调的那个
词刚好在行首的话就会识别错误了。事实上,如果是标题的话, *
后面应该至少
还要有一个空格,所以这里可以修改一下这个正则表达式。这是一个buffer 局部
变量,所以可以在 muse-mode
的 hook 里面修改而不用担心影响到全局的值。另
外,打开文档的时候就使用 hide-body
来让他只显示框架是很不错的一个选择:
缩写词功能
另外,在编辑 Muse 文档的时候经常要输入类似 [[Emacs]]
这类的东西,有时
候很麻烦,可以使用缩写词功能来解决这个问题。
如果平时在使用缩写词功能,那么只要定义 muse-mode
里面的缩写词,并保存
到文件,启动的时候加载就行了。如果平时并没有使用什么缩写词功能,只是在
muse-mode
里面才使用的话,也可以在 ~/.emacs
里面加入定义缩写词的语句:
并在 muse-mode
的 hook 里面打开 abbrev-mode
就可以了。
当然,直接使用 msf-abbrev.el 更方便了。需要注意一点的是,muse 绑定了
<tab>
键,而 msf-abbrev.el 是绑定的 TAB
键,在 X 下面的话就无法使用
TAB
在各个域之间切换了2,这个时候可以使用 C-i
。
TAB 键跳转
默认情况下 TAB
键会在各个链接之间跳转,我觉得这没有什么用处,而且很烦
人,我更喜欢让 TAB
键帮我缩进到正确的位置,于是我做了下面的绑定:
或者,使用更舒服的 org-cycle 的绑定。
引进 org-mode 的舒服的地方
org-mode
和 muse-mode
有很多相似的地方,但是,可以说,他们的起源不同:
muse-mode
主要是来源于 emacs-wiki-mode
,主要侧重于发布,因此在支持的
发布格式以及发布格式的可定制性方面远胜于 org-mode
;而 org-mode
最初设
置的目的是用于记事、维护 TODO 列表以及制作日程、计划等,侧重于编辑和交
互,因此 org-mode
在交互(例如方便的 TAB
键行使 outline 操作)和编辑(例
如方便强大的表格编辑功能)方面比 muse-mode
要舒服很多。
现在有一些人也在考虑融合两者之间的优点,只是还没有什么明显的进展。我在 这里介绍一些我自己的一些经验。
标题的显示
muse-mode
默认是把标题按照比例放大来显示的,我更喜欢 org-mode
那种(其
实是来源于最初的 outline-mode )不放大字体,而以不同的颜色来显示的方式。
其实 Muse 已经有这个选项了:
TAB 键行使 outline 操作
muse-mode
里面 TAB
键默认被绑定到了 muse-next-reference
上,我基本上从
来没有用过这个功能,而且还经常按错。因此我一般是把他绑定到缩进的命令上。
后来我发现 org-mode
里面的 TAB
说绑定的 org-cycle
命令不在 org-mode
里
面也可以使用。于是便绑定了过来:
org-mode
的这个 org-cycle
命令非常方便,在标题的地方会执行相应的
outline 操作,其他地方则是相应的缩进操作。当然,也需要在 muse-mode
里
面打开 outline-mode ,否则 Muse 自己的一些颜色显示等有时候会混乱起来。
Footnote
1. 通常,如果你想要保证自己的 Muse 代码是可以通用地转换到任何格式,那 么在里面使用某一种输出格式专有的语句通常是不被推荐的。
2. 在 ASCII 码里面, C-i
和 TAB
是相同的字符。如果终端能够把两者区分
开(如果在 X 窗口下运行,通常是可以区分开的),Emacs 将两者分别解释
作整数 9 和 symbol `tab' 。通常情况下,区分这两者并没有什么用处,
因此默认情况下 function-key-map
被设置为把 `tab' 映射到 9 上。这里
muse 重新绑定了 `tab' ,不再映射到 9 上,所以再这里无效了。但是可
以直接使用 C-i
(即 ASCII 码的 9)。