2017/04/05

Emacsを使い始めてOrg modeとMarkdownを比べる

1 Emacsを始める

マウスが使えて機能も充実しているのでデスクトップ用のエディタとしてEmacsを使い始めました。

2 チュートリアルなど

最初から入っているチュートリアル(C-h t)で基本的な操作を覚えました。fun learningさんの動画チュートリアルもまとまっています。パッケージマネージャやDired(ファイルマネージャ)についてはjekorさんの動画チュートリアルを流し見ました。Org modeについてはilearnthings.comさんのTaking Notes In Emacs Org-Modeorgcardを見ながら使い始めました。

3 Org mode

Org modeは予定、メモ、日記などを書くためのEmacsのモードです。GithubではMarkdownのかわりに使えるようです。

3.1 よく行う操作

キーボードショートカットを覚えると速いですが、上側のメニューから操作することもできます。メニューは覚えていないコマンドを一覧として眺めたり、ショートカットを確認するときにも便利です。
C-c C-lで対話的にリンクを挿入できます。いろいろなリンクが張れてとても便利です。
コードブロックなどを挿入するときはEasy Templatesが使えます。例えば <s と打ってTABを押すことで #+BEGIN_SRC ... #+END_SRC と入力することができます。
エクスポートするときはC-c C-eでメニューが開きます。例えばC-c C-e h hでhtmlに出力します。

3.2 Markdownとの対比

機能面ではOrg modeが圧倒的なので、ここでは共通する機能の書き方についてのみ比べています。MarkdownについてはCommomMarkGFMを参照しました。
 機能             Org mode                       CommomMark                 
 斜体             /Italic/                       *Italic*                   
 太字             *Bold*                         **Bold**                   
 見出し1          * Heading 1                    # Heading 1                
 リンク        
                
 [[http://example.com][Link]]
 [[http://example.com]]       
 [Link](http://example.com)
 <http://example.com> 
 画像             [[./image.png]]                ![](./image.png)           
               
 引用          
                
 #BEGIN_QUOTE                
 Blockquote                  
 #END_QUOTE                   
                           
 > Blockquote              
                            
               
 段落          
                
 段落1。                     
                             
 段落2。空行を挟む。          
 段落1。                   
                           
 段落2。空行を挟む。        
               
 順序なしリスト
                
 - List                      
 - List                      
 - List                       
 - List                    
 - List                    
 - List                     
               
 順序付きリスト
                
 1. One                      
 2. Two                      
 3. Three                     
 1. One                    
 2. Two                    
 3. Three                   
 水平線           -----                          ---                        
 行中のコード     src_language{Inline code}      `Inline code`              
               
 コードブロック
                
 #+BEGIN_SRC python          
 print "Code block."         
 #+END_SRC                    
 ``` python                
 print "Code block."       
 ```                        

3.3 表について

GFMでは以下のように表を書けます。
| foo | bar |
| --- | --- |
| baz | bim |
Org modeの表は以下です。
| foo | bar |
|-----+-----|
| baz | bim |
どちらも出力は以下になります。
foo bar
baz bim
Org modeの表は以下まで入力してしまえばTABで補完できます。
| foo | bar |
|-<TAB>
そのままTABを入力すると次々とセルを移動してくれます。行、列の挿入と削除はM-S-<矢印キー>で行えます。

3.4 table.el

PandocのMarkdownではmultiline tablesが使えます。
Org modeではtable.elと連携することで同じことができます。使い方はC-h P tableで読むことができます。
+-----+-----+
| foo | bar |
+-----+-----+
| baz | bim |
| baz | bim |
+-----+-----+
 foo   bar 
 baz
 baz 
 bim
 bim 
table.elの例Emacsのマニュアルをみると以下は通りそうなのですが、うまくいきません。
+-----+-----+
| foo | bar |
+-----+     |
| baz +-----+
| baz | bim |
+-----+-----+
 foo   bar
     
 baz
 baz 
 bim 
 foo   bar
     
これはうまくいきます。
+-----+-----+------+
| foo | bar | spam |
+-----+     +------+
| baz +-----+ ham  |
| baz | bim |  egg |
+-----+-----+------+
 foo   bar
     
 spam 
 baz
 baz 
 ham 
  egg 
 bim 
これも通ります。
+---+-----+
|foo| bar |
+---+-+---+
| baz |bim|
+-----+---+
foo  bar 
 baz  bim
できあがったhtmlは=&nbsp;=によって整形されています。またtable.elの表はhtmlやLaTeXに変換できますがGithubではうまく表示されません。アスキーアートを整形する手間も半端ではないので、複雑な表はExcelやCalcで作るほうが無難かと思います。