2014年4月6日日曜日

[Emacs] org-modeでメモ取ったりする


Emacsにはorg-modeという機能があって、簡単なメモとか取るのに便利です。
最近自分の中で設定が充実してきたのでご紹介します。

この記事はorg-modeのバージョン8以降の設定方法について書いています。
org-modeのバージョンは
M-x org-version
で調べられます。 最近のEmacsではpackage-list-packageから最新版が入れられるはずです。

作業中に瞬時にメモ取る設定

プログラムとか論文とか書いてるときに、ふと新しいアイデアとかTODOリストとか思い付いたりするでしょう?
そんなときにいちいち他のアプリに切り替えずに、Emacs上でその場で書くための設定がこちら。

(require 'org-install)
(setq org-startup-truncated nil)
(setq org-return-follows-link t)
(add-to-list 'auto-mode-alist '("\\.org$" . org-mode))
;; (org-remember-insinuate)
(setq org-directory "~/Dropbox/memo/")
(setq org-default-notes-file (concat org-directory "agenda.org"))
(setq org-capture-templates
      '(("t" "Todo" entry
         (file+headline nil "Inbox")
         "** TODO %?\n   %i\n   %a\n   %t")
        ("b" "Bug" entry
         (file+headline nil "Inbox")
         "** TODO %?   :bug:\n   %i\n   %a\n   %t")
        ("i" "Idea" entry
         (file+headline nil "New Ideas")
         "** %?\n   %i\n   %a\n   %t")))

(setq org-agenda-files (list org-directory)) ;agendaを使うため
;; ショートカットキー
(global-set-key "\C-cl" 'org-store-link)
(global-set-key "\C-co" 'org-capture)
(global-set-key "\C-ca" 'org-agenda)
(global-set-key "\C-cb" 'org-iswitchb)

(add-hook 'org-mode-hook 'turn-on-font-lock)
この設定しておくと、どんな作業中でもC-c oorg-capture起動した後にtでTODO、iでアイデアとかをメモできます。
org-directoryで設定したフォルダのorg-default-notes-fileのファイルに全部保存されていきます。
これが今TODOを追加しようとしている画面で、下のバッファがorg-captureの作業バッファになります。 この状態でC-c C-c押すと保存され、C-c C-kでキャンセルになります。
今まで書いたTODOとかアイデアとかをまとめて見たいときはC-c aです。
ここまでの設定は以下の参考サイトほぼパクりです。
 org-mode 初挑戦。 - 日々、とんは語る。

org-captureのバッファは、org-modeというメジャーモードになってて、上の設定やると.orgの拡張子のファイルは全てorg-modeで起動されます。
多分初めてorg-mode触る人は意味分からないと思うし、僕も未だによく分かっていませんが、最後の節で簡単な操作方法を紹介します。

orgファイルをLaTeX経由でpdfに変換する

僕はこれをやりたくてorg-mode使い始めました。
新しいプログラム書くときとか論文書くときとか、今まで裏紙なんかに雑に仕様を書いたりアウトライン書いたりしてたんですが、org-mode使うと何か良さそうです。
まず設定です。

(setq org-latex-classes
      '(("IEEEdouble"
         "\\documentclass[11pt,twocolumn,twoside]{IEEEtran}
\\usepackage{newenum}
\\usepackage{times,amsmath,amssymb}
\\usepackage{amsthm}
\\usepackage{cite,subfigure,bm}
\\usepackage{multicol,multirow}
\\usepackage{array}
\\usepackage[dvipdfmx,hiresbb]{graphicx}
\\usepackage[dvipdfmx]{color}"
         ("\\section{%s}" . "\\section*{%s}")
         ("\\subsection{%s}" . "\\subsection*{%s}")
         ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
         ("\\paragraph{%s}" . "\\paragraph*{%s}")
         ("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
        ("IEEEsingle"
         "\\documentclass[11pt,draftcls,onecolumn]{IEEEtran}
\\usepackage{newenum}
\\usepackage{times,amsmath,amssymb}
\\usepackage{amsthm}
\\usepackage{cite,subfigure,bm}
\\usepackage{multicol,multirow}
\\usepackage{array}
\\usepackage[dvipdfmx,hiresbb]{graphicx}
\\usepackage[dvipdfmx]{color}"
         ("\\section{%s}" . "\\section*{%s}")
         ("\\subsection{%s}" . "\\subsection*{%s}")
         ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
         ("\\paragraph{%s}" . "\\paragraph*{%s}")
         ("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
        ("thesis"
         "
        \\documentclass{jsarticle}
        \\usepackage[dvipdfmx]{graphicx}
        \\usepackage[utf8]{inputenc}
        \\usepackage[T1]{fontenc}
        "
         ("\\chapter{%s}" . "\\chapter*{%s}")
         ("\\section{%s}" . "\\section*{%s}")
         ("\\subsection{%s}" . "\\subsection*{%s}")
         ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
         ("\\paragraph{%s}" . "\\paragraph*{%s}")
         ("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
        ))

(setq org-latex-default-class "IEEEdouble")

;;; LaTeX 形式のファイル PDF に変換するためのコマンド
(setq org-latex-pdf-process
      '("platex %f"
        "bibtex %b"
        "platex %f"
        "platex %f"
        "dvipdfmx %b.dvi"))
長いですけど大半はLaTeXのヘッダ部分の設定で、ここではorg-latex-classesに3つのパターンを追加しています(インデントぐちゃってますが気にしない)。
3つのパターンにはそれぞれ"IEEEdouble"、"IEEEsingle"、"thesis"という名前が付いてて、pdfに変換するときにorgファイル内でこれらを指定することで、IEEEdoubleとかIEEEsingleのスタイルをスムーズに切り替えることができます。
具体的なorgファイルの先頭部分は以下のような感じになります。
#+TITLE: Title
#+AUTHOR: Author
#+LATEX_CLASS: IEEEsingle
#+OPTIONS: toc:nil timestamp:nil
TITLEがタイトル、AUTHORが著者、LATEX_CLASSがさっきの3つのパターンのどれかが入ります。
他に設定できるオプションは以下。
Export settings - The Org Manual

これ以降にLaTeX本文を書きますが、普通のtexファイルの形式ではなくてアスタリスク(*)の数で章とか節を分けます。
具体的なソースと出力はこんな感じです。
めんどくさいんで画像だけにしときます。
\begin{...}\end{...}などの普通のLaTeXコマンドも使えます。
orgファイルからpdfへの変換方法は次の節で説明しますが、その前に数式の扱いでちょっとだけ困ってしまったことがあったので報告しときます。

文中に数式を挿入する際に\$(ドルマーク)を使いますが、日本語の文章書いててなぜか数式に変換されずに\$がそのまま表示されました。
どうやら、数式と認識させるためには終わり(2つ目)の方の\$の後には空白か句読点を入れなければいけないらしいです。
参考サイト↓
Org-Mode の組み込み LaTeX 和訳部分 {= 宇田川浩行 {= 希哲館*月庭 {KTK}

 org-modeでの簡単な操作方法

さっきも書いたように、アスタリスク(*)が重要で、その数が増えるごとに章、節、小説と細かいランク分けになります。
以下よく使うショートカットキー。
C-c C-n,
C-c C-p,
C-c C-f,
C-c C-b
節間の移動。各々の挙動はめんどくさいから各自確かめて。
M-<ENTER>同じランクを追加。
<TAB>文章の折り畳み。
M-[→], M-[←]ランク変え。
C-c C-tTODO項目の状態変化。
C-c C-e l opdfに変換して開く。C-c C-e押した時点でその他のガイドがあるので色々試してみると良い。
あとは参考サイトなりを見て徐々に覚えていくと良さそうです。
箇条書きなんかも簡単にできます。
参考サイト:
org-mode による論文作成入門 - 勉強日記
Emacs org-modeを使ってみる: (1) インストール - 屯遁のパズルとプログラミングの日記
org-mode 8.0で変わった変数など - Qiita

通常のTeXモードかorg-modeどっちを使うべきか

僕としては、以前書いたAUCTeX+RefTeXの組み合わせの方がショートカットキーが充実しているし、さらにYASnippetも使いこなすとかなり楽にtexのソースの編集ができます。
Ochiailab Tips: AUCTex + RefTexで快適論文作成
Ochiailab Tips: 最強テンプレート補完機能: YASnippet

ただメモ書きにtexモードを使うにはちょっと大袈裟だなという感じがしてて、orgモードだとアスタリスクでアウトラインが見易いというのが利点だと思うので、大したドキュメントではないときにはorgモード使えばいいのじゃないかと思っています。
Markdownへの出力も対応しているので、GitHubに上げるReadmeファイルもこれで書くと良さそうです。

では。
many many returns of the day.........

0 件のコメント :

コメントを投稿