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-x 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で作るほうが無難かと思います。