EMACS-DOCUMENT

=============>集思广益

用Org-mode写论文的一些tips

1 Introduction

许多人都将org-mode作为制定计划的工具来用, 不过我也同时觉得它很适合用来写论文,你甚至可以通过 \(\rm\LaTeX{}\) 导出为pdf文件. 如果你没有有特别严格的格式要求,org可以加快你的写作速度,而且提供了许多超棒的功能供你使用. 下面是一些tips希望可以帮到你们.

2 Set up a Template

如果你在编写人文类的论文,你可以在org文件的头部添加一些内容来格式化你的论文格式. 确定好你的论文格式并设置好相应的模板能够极大的简化你的工作量(It makes things much easier if you figure out what you standardly need in a paper and set up a template to include them each time). I just have a TextExpander snippet set up for this. 下面是一份例子.

# Set the article class
#+LaTeX_CLASS: article
#+LaTeX_CLASS_OPTIONS: [12pt]

# No need for a table of contents, unless your paper is quite long.
#+OPTIONS: toc:nil

# Use fancy looking fonts. If you don't have MinionPro installed,
# a good alternative is the Palatino-style pxfonts.
# See: http://www.tug.dk/FontCatalogue/pxfonts/
#+LATEX_HEADER: \usepackage[mathlf]{MinionPro}
#+LATEX_HEADER: \usepackage[scaled=.875]{inconsolata}

# Set the spacing to double, as required in most papers.
#+LATEX_HEADER: \usepackage{setspace}
#+LATEX_HEADER: \doublespacing

# Fix the margins
#+LATEX_HEADER: \usepackage[margin=1in]{geometry}

# This line makes lists work better:
# It eliminates whitespace before/within a list and pushes it tt the left margin
#+LATEX_HEADER: \usepackage{enumitem}
#+LATEX_HEADER: \setlist[enumerate,itemize]{noitemsep,nolistsep,leftmargin=*}

# I always include this for my bibliographies
#+LATEX_HEADER: \usepackage[notes,isbn=false,backend=biber]{biblatex-chicago}
#+LATEX_HEADER: \addbibresource{/Users/clarkdonley/Files/Academic/Bibliography/main.bib}

#+TITLE: An Example Title
#+AUTHOR: Clark Donley
#+DATE: October 26, 2014

3 Enable Fast, LaTeX-friendly Spellcheck

当你进入org-mode时并不会自动运行拼写检查功能, 拼写检查的功能对写论文很明显是一大助力. 要实现写论文时启动拼写检查,需要经过一下三个步骤. 当然那前提是你已经安装了 flyspell.

以下几个步骤需要修改你的 .emacs 或者 Preferences.el 文件.

  1. 将Flyspell 挂载到 Org-mode 的hook中.
  2. 关掉掉Flyspell messages. Flyspell在启动时,若你允许在status bar上现实 spell-checking的过程,那会造成一些明显的延时,因此若你不希望每次打开org文件都有一些延时的话,你需要关掉这些message.
  3. 在拼写检查时忽略对 \(\rm\LaTeX{}\) 命令的检查. 我随处都可能会用到 \(\rm\LaTeX{}\) 里的命令,如果不忽略掉这些检查,你会发现到处都有拼写错误的提示,显得很乱.
;; 1. hook flyspell into org-mode
(add-hook 'org-mode-hook 'flyspell-mode)
(add-hook 'org-mode-hook 'flyspell-buffer)

;; 2. ignore message flags
(setq flyspell-issue-message-flag nil)

;; 3. ignore tex commands
(add-hook 'org-mode-hook (lambda () (setq ispell-parser 'tex)))
(defun flyspell-ignore-tex ()
  (interactive)
  (set (make-variable-buffer-local 'ispell-parser) 'tex))
(add-hook 'org-mode-hook 'flyspell-ignore-tex)

4 Enable CDLaTeX

CDLaTeX是一款经常与LaTex major mode在一起使用的minor mode. 他能够提高插入环境变量以及数学模板的速率. 在Org manual中告诉了你一个很简单的启动该minor mode的方法:

(add-hook 'org-mode-hook 'turn-on-org-cdlatex)

5 Automatically Count Words

我认为恁能在写论文时能实时知道写了多少字应该很不错. 要实现这一点非常简单. 安装好wc-mode 后,再将下列放到你的 .emacsPreferences.el 中就行了.

(add-hook 'org-mode-hook 'wc-mode)

6 Distraction-free Writing: Enable writeroom-mode

这并不是org所特有的功能, 当你写作时可以开启 writeroom-mode 来屏蔽调所有的干扰. Writeroom-mode 会全屏居中显示正在写得内容,而没有任何其他的东西.

7 Enable RefTex for Fast Insertion of Citations

借助 RefTeX 可以快速的从bib文件中插入文献引用. 我准照 Kieran Healy的建议 对RefTeX进行了一些修改. 我将bibliography文件保存在 /Users/clarkdonley/Files/Academic/Bibliography/main.bib 中,并且安装了 biblatex 插件. 下面列出我的相关配置,你可以根据需要修改它并将它纳入你的 .emacsPreferences.el 中.

(setq reftex-default-bibliography 
  '("/Users/clarkdonley/Files/Academic/Bibliography/main.bib"))

(setq reftex-bibpath-environment-variables
  '("/Users/clarkdonley/Files/Academic/Bibliography/:/Users/clarkdonley/Files/Academic/Bibliography/"))

(setq reftex-bibpath-environment-variables
'("/Users/clarkdonley/Library/texmf/bibtex/bib"))
(setq reftex-default-bibliography '("/Users/clarkdonley/Files/Academic/Bibliography/main.bib"))
(setq reftex-bibliography-commands '("bibliography" "nobibliography" "addbibresource"))

(setq reftex-default-bibliography
      (quote
       ("user.bib" "local.bib" "main.bib")))

(add-hook 'LaTeX-mode-hook 'turn-on-reftex)   ; with AUCTeX LaTeX mode
(autoload 'reftex-mode     "reftex" "RefTeX Minor Mode" t)
(autoload 'turn-on-reftex  "reftex" "RefTeX Minor Mode" nil)
(autoload 'reftex-citation "reftex-cite" "Make citation" nil)
(autoload 'reftex-index-phrase-mode "reftex-index" "Phrase mode" t)
(add-hook 'LaTeX-mode-hook 'turn-on-reftex)   ; with AUCTeX LaTeX mode
(add-hook 'latex-mode-hook 'turn-on-reftex)   ; with Emacs latex mode

;; Make RefTeX faster
(setq reftex-enable-partial-scans t)
(setq reftex-save-parse-info t)
(setq reftex-use-multiple-selection-buffers t)
(setq reftex-plug-into-AUCTeX t)

;; Make RefTeX work with Org-Mode
;; use 'C-c (' instead of 'C-c [' because the latter is already
;; defined in orgmode to the add-to-agenda command.
(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)

;; RefTeX formats for biblatex (not natbib)
(setq reftex-cite-format
      '(
        (?\C-m . "\\cite[]{%l}")
        (?t . "\\textcite{%l}")
        (?a . "\\autocite[]{%l}")
        (?p . "\\parencite{%l}")
        (?f . "\\footcite[][]{%l}")
        (?F . "\\fullcite[]{%l}")
        (?x . "[]{%l}")
        (?X . "{%l}")
        ))

(setq font-latex-match-reference-keywords
      '(("cite" "[{")
        ("cites" "[{}]")
        ("autocite" "[{")
        ("footcite" "[{")
        ("footcites" "[{")
        ("parencite" "[{")
        ("textcite" "[{")
        ("fullcite" "[{") 
        ("citetitle" "[{") 
        ("citetitles" "[{") 
        ("headlessfullcite" "[{")))

(setq reftex-cite-prompt-optional-args nil)
(setq reftex-cite-cleanup-optional-args t)

这样配置之后,你就可以通过 C-c ( 来插入文献引用了.

还有一点需要提一下, 有时我需要关闭再重新打开org文件才能刷新 .bib 的属性. 以后我会试着修正这个问题.