在 Emacs Org Mode 里,默认情况下 _ 这种字符会被当成标记语言来进行转义。有的时候,如果你只是写写文章,这种默认的转义,会让你很不方便,尤其是你在写一篇介绍技术的文章,里面出现的变量名有很多的下划线。这时,你会说:”Oh, my god! 难道要我一个一个去标记不让 _ 转义么?”
如何设置让 Org Mode 在默认情况下,不转义 _ 字符呢?
你可以在一个 org 文件的开头,用下面的设置来关闭这个功能。
#+OPTIONS: ^:nil
如果你需要更方便的设置,可以把上面这个改为
#+OPTIONS: ^:{}
这样,当你写
a_{b}
时,_ 后被 {} 括起来的内容就会被转义,而写 a_b 时,就按普通的方式来显示。
如果你是用 org sites 来写笔记,想让某个 site 的所有 org 文件不转义 _ 字符,则也可以直接在 org sites 配置文件里,配置下面这么一句,一了百了:
(setq org-export-with-sub-superscripts nil)
也可以在 org sites 里设置这个属性,只作用于某一个 site:
:sub-superscript nil
如果需要像上面一样,采用相对智能的 {} 方式,可以设置成
:sub-superscript {}
或是直接用 elisp 来设置全局的属性:
(setq org-export-with-sub-superscripts '{})
这样就会用 {} 来转义了。
用 Emacs Org 和 Muse 记了一大堆的笔记,分散在很多目录及很多文件里,当要找一个以前的笔记时,怎么样才能快速、有效地搜索到目标文件呢?下面就探讨一下几种常用的方法:
在 agenda 里用 M-x org-agenda RET s 进行搜索;
当然,也可以直接用 Org 的 occur-tree 功能;
如果你想使用原生态的 Emacs 搜索功能,可以进入 dired 模式到你待搜索的目录里,用命令 M-x grep-find RET 进行本地全文搜索。
Windows7 自带的搜索功能,也有预先进行检索收录的功能,所以,如果是对文本文件或是 html 文件进行本地搜索,也是想当的方便的。
下载一个 Google 桌面搜索,可以把你的 Org 或是 Muse 笔记的发布路径添加进去,从而对这部分内容进行快速检索。
并且这个产品的好处,是通过浏览器访问,像我们这种用 org 建工程写了一大堆 html 笔记的人,只要轻轻一点链接,就可以在浏览器里打开相应的笔记,真方便!
我习惯于让 Google Desktop 只检索我的笔记目录,整个硬盘都开放给第三方软件搜索,感觉实在不太爽。
百度也有类似 Google Desktop 的搜索工具,使用方法类似,百度桌面搜索安装后,可以通过以下网址来访问本地的搜索页面:
http://127.0.0.1:7887/&s=200566888
这基本上是唯一让我觉得满意的百度产品,也基本上唯一是我还可能会用的百度产品。
其它文本编辑器基本上都有从目录里搜索的功能,你可以利用这种方法对你的笔记目录进行搜索。当然,并不推荐使用这种方法,吃力不讨好,看起来还特山寨~~
还有其它更好的方法吗?欢迎大家补充。
Emacs 有一大堆自动保存的文件,之前我就介绍过如何重定向 .emacs.desktop 文件的存储路径,事实上,我们还有很多其它文件需要重定向保存路径。否则,对于这些文件来说,在多台电脑之间同步 Emacs 配置文件,一来实在没有同步这些文件的必要,二来存在潜在文件冲突、混淆的可能性。
比如说,因为我的 Emacs 配置,我有 .ido.last 、.recentf 以及 .emacs-places 这几个文件会自动生成到 Emacs 的 Home 目录。因为这些文件是跟特定的机器有关,也就没有用 Dropbox 来同步的必要了。
我们可以通过下面的方法来设置这些文件的存储路径,从而让 Dropbox 不同步这些文件。
对于 .recentf 文件,可以用下面的代码,来设置固定的存储路径:
;; set recent open files (require 'recentf) (recentf-mode t) (setq recentf-save-file "E:/water/.recentf")
对于 .ido.last 文件,可以用下面的代码来设置相关的属性:
(require 'ido) (ido-mode t) (setq ido-save-directory-list-file "E:/water/ido.last" ido-ignore-buffers ;; ignore these guys '("\\` " "^\*Mess" "^\*Back" ".*Completion" "^\*Ido" "^\*trace" "^\*compilation" "^\*GTAGS" "^session\.*" "^\*"))
其中最重要的是设置 ido-save-directory-list-file 这个变量。
有关 .emacs-places 这个文件,是由 saveplace.el 这个文件保存出来的,利用下面的代码就可以重置该文件的存储路径:
(setq save-place-file "E:/water/.emacs-places")
要查找以上这些变量的当前值,可以使用 M-x describe-variable RET save-place-file 这样的命令来查询。
这样,通过这些清理,用 SVN 或 Dropbox 来同步 Emacs 相关文件,就实现了从内容到形式的统一与方便。
使用默认的 Emacs 字体颜色,会让人疯掉的;但是你使用了 Emacs Theme 后,可能依然会觉得 Org Mode 或 Muse Mode 的颜色让人看着不舒服,或太亮或太暗。
这个时候,我们可以轻松地通过以下方式定制它们的字体、背景颜色等。
可以用
M-x customize-group RET org-faces RET
来定义各级菜单字体的颜色、背景颜色等。当然,Org Mode 的定义有点特殊,对于普通的文字设置,需要通过
M-x customize-face RET default RET
来对 Emacs 全文的普通字体来进行设置。
可以用
M-x customize-group RET muse-colors RET
来定义 Emacs Muse 各级菜单字体的颜色、字体大小、背景颜色等。
如果你看到了喜欢的字体,想设置为你的字体,要怎么办呢?
先找到你喜欢的颜色,用
M-x describe-face
来查看相应的名称,然后再用
M-x customize-face RET default RET
来设置相关的颜色。
当然,你也可以通过一些工具来获得颜色的名称。
在用 Emacs Muse 或 Org 来写文档的时候,经常需要用到内部链接,尤其是要链接到某一章节,这个时候,启用固定的锚链接是最合适的方法。
经常需要内部链接 Emacs Muse 写的文档,即链接一个锚链接,可以用下面的方法设置一个锚链接:
#Open-Ubuntu-ssh
把上面这个语句放到文档的任意地方,然后,在 Muse 文档里直接用下面的方式即可生成锚链接:
[[test.html#Open-Ubuntu-ssh][test anchor link]]
当然,如果你要链接其它文件的锚链接,则要加上相应的文件名。
Emacs Org Mode 也可以方便地实现文档内部的锚链接功能,与 Muse 类似,用下面的语句就可以生成相应的锚链接:
# <<My Target>>
把上面这句话放到文档的任意地方,即可设置文档的锚连接。至于目标链接的形式,和普通链接一样。
Org Mode 比 Muse Mode 设计得更好的地方在于:如果你没有用形如 # My Target 的方式来设置锚链接,并且你依然采用了锚链接的形式来生成一个链接,则 Org 会自动根据你文档的子标题关键字来寻找最接近的锚链接(当然,这个方法对中文标题来讲,会麻烦一些吧?)。
今天在写《Emacs Org Mode 与 BibTeX 的结合》这篇笔记的时候,有一段如下的东西要放到文章里:
#+TODO: TODO(t) STARTED(s) | DONE(d) DEFERRED(f) REFTEX
结果我忘记在前面空格,导致我一用 C-c C-t 来设置 Org 笔记状态的时候,Emacs 只显示上面这几种状态。
害得我把今天在 .emacs 里新加的设置全部取消来找原因,折腾了很久,无果。最后碰巧发现是这句的问题,真是郁闷死了!
所以,以后用 Org Mode 写东西,注意放在 block 里的内容,最好都空格而不是顶格写。
我在多台电脑上使用 Emacs,同时也开启了 Desktop 功能,可是我并不想让所有电脑的 .emacs.desktop 存储的是同一批文件,这样我可以在不同的电脑上有针对性地干不同的事情。因此,我琢磨着,怎么在用 Dropbox 同步 Emacs 文件的时候,并不同步 .emacs.desktop 文件。
总的来说,可以有几种方法来设置这个 .emacs.desktop 的相关信息:
通过使用命令 M-x customize-group RET desktop 可以配置 desktop 的相关属性,即打开 desktop 组的设置选项进行相关设置。
(setq desktop-path '("~/.emacs.d/")) (setq desktop-dirname "~/.emacs.d/") (setq desktop-base-file-name ".emacs-desktop")
因为我用 Dropbox 在多台电脑里同步 Emacs 配置文件,所以采用的是第2种方法,这样各台机的配置就不会相互影响了。如果你需要针对不同的机器设置不同的参数,可以参考多台电脑间同步 Emacs 配置文件的方法,针对不同的机器使用不同的参数进行配置;如果设置项太多,还可以写成一个函数重复调用。
Emacs Org Mode 可以是一个优秀的笔记工具,可是,如果你想用它来写正式一点的论文,可以吗?当然可以了,你可以把 Org Mode 和 LaTeX 结合起来用,当然最重要的是要解决参考文献引用的问题。
整体的思路如下:
可以用 Emacs BibTeX Mode 或 JabRef 之类的方式来生成这个文件,当然也可以用其它文献管理工具,只要它能导出 BibTeX 文件即可。
创建 Org 工程的时候,和一般的工程没有任何区别。
在这里,重点介绍一下第三个步骤,即如何在 Org Mode 里插入 BibTeX 记录。从官方的这篇参考文献里可以看出,我们可以用三种方法在 org 文件里引用 BibTeX 参考文献,从而插入 LaTeX 类的参考文献。
1). 最简单的办法,给所有的 Org 文件指定一个 BibTeX 文件,然后在 Org 文件里插入该 BibTeX 文件的参考文献记录
具体的办法,先把下面的代码放到 .emacs 里:
(setq reftex-default-bibliography
(quote
("default.bib" "~/org/notes/refer.bib")))
(define-key org-mode-map (kbd "C-c )") 'reftex-citation)
在这里,我指定的 BibTeX 文件为 default.bib 和 ~/org/notes/refer.bib 。然后,可以在所有的 Org 文件里,通过命令 C-c ) 或 M-x reftex-citation 来进行参考文献的插入,根据提示进行相关操作即可。
2). 为特定的 Org 文件,指定特定的 BibTeX 文件
这个方法是 Marios Braindump 的博客里介绍的,具体方法如下:
先把下面的代码放到 .emacs 里:
(defun org-mode-reftex-setup () (load-library "reftex") (and (buffer-file-name) (file-exists-p (buffer-file-name)) (reftex-parse-all)) (define-key org-mode-map (kbd "C-c )") 'reftex-citation)) (add-hook 'org-mode-hook 'org-mode-reftex-setup)
然后在你需要插入 BibTeX 参考文献的 Org 文件里,加入下面这段话(可以是任意位置):
\bibliographystyle{plain} \bibliography{BIB-NAME}
把上面的 BIB-NAME 换成你想指定的 BibTeX 文件,这样就可以对该 Org 文件指定特定的 BibTeX 文件,然后可以用 C-c ) 或 M-x reftex-citation 来插入该 BibTeX 文件里的参考文献。
上面的代码会在 Emacs 启动的时候,要求你指定一个 master 文件,用来存储生成的 tex 文件。
3). 另外一种方法,实现为特定的 Org 文件指定特定 BibTeX 文件的功能
还有另外一种方法,可以实现第2种方法类似的功能,即为特定 Org 文件指定特定 BibTeX 文件的方法。把下面的代码放到 .emacs 文件里:
(defun org-mode-article-modes () (reftex-mode t) (and (buffer-file-name) (file-exists-p (buffer-file-name)) (reftex-parse-all))) (add-hook 'org-mode-hook (lambda () (if (member "REFTEX" org-todo-keywords-1) (org-mode-article-modes))))
然后把下面这一行加到你需要插入 BibTeX 的 Org 文件的开头:
#+TODO: TODO(t) STARTED(s) | DONE(d) DEFERRED(f) REFTEX
其它步骤与第2种方法类似。这种方法我没有仔细测试,有兴趣的 Emacser 们可以试试。
通过以上方法,就可以在用 Org Mode 打造的笔记本里,很方便地索引 BibTeX 里的参考文献了。
当然,如果你不喜欢用 Org Mode,也有其它用 Emacs 来写论文的思路,例如:Emacs + AucTeX + RefTeX + Outline-minor-mode
在 Emacs 里用 Org mode 来编辑,如果链接一张图片,只能显示图片的链接地址,并不能真正显示一张图片。
如果用 iimage 这个 minor mode,则可以使 Emacs 在编辑区里显示图片。下载 iimage.el 文件扔到 Emacs 的目录里,然后在 .emacs 里添加下面的代码:
;; iimage mode (autoload 'iimage-mode "iimage" "Support Inline image minor mode." t) (autoload 'turn-on-iimage-mode "iimage" "Turn on Inline image minor mode." t)
然后就可以用命令
M-x iimage-mode RET
在当前模式里启动 iimage 这个 minor mode。
如果想在 Emacs org 模式里启用 iimage 模式,把下面的代码放到配置文件里,则可以在 Emacs Org 的编辑区里显示图片。
(defun org-toggle-iimage-in-org () "display images in your org file" (interactive) (if (face-underline-p 'org-link) (set-face-underline-p 'org-link nil) (set-face-underline-p 'org-link t)) (iimage-mode))
以后要写图文并茂的笔记就方便多了,不用发布后再浏览图片在文章里的效果了。
可以用 M-x org-toggle-iimage-in-org 或 M-x iimage-mode 命令来激活 iimage 模式,类似以下这些链接形式会直接显示为图片:
file://foo.png `file://foo.png' [[foo.gif]] ‹foo.png› `foo.JPG'
在我的 Windows 系统下,用 Gpg4Win 来作为 Emacs EasyPG 文件加密解密的工具,可是每次用 EasyPG 打开加密的文件时,都会弹出一个对话框来让我输 Key。
弹出对话框来倒也无所谓,很要命的是,在这个对话框里,没有办法输入 Key。每每要用加密文件的关键时刻,我都不知所措,想尽办法重启电脑之类的来解决该问题。
今天一怒之下,改用 Cygwin 里的 GnuPG 了,现在 EasyPG 的表现和 Linux 下终于一样了,在 MiniBuffer 里输 Key 即可。
有人知道这是什么问题吗?是我哪里配置得有问题吗?