Org Modeのリンク機能で情報集約

# 何をしたいか

調べ物をすると同時に，入手した情報を使って高効率かつ再利用可能な文書を作りたい．

## Emacs Org Mode のリンク機能

[Org Mode](http://orgmode.org) では，以下の書式でクリッカブルリンクを生成できる．

> [[情報がある場所][適当な説明（ここが表示される）]]

これを利用すれば，シンプルな一文にたくさんの有益な情報（リンク）を埋め込むことができ，情報集約率が高まる．

### 例

>「今年のAdventカレンダーには，Org Modeのリンク機能を利用した情報収集に関する記事がある．」

という文章の中にリンクを埋め込むと，リンク部分の色が変化するはずだ．

>「今年の[Adventカレンダー](http://qiita.com/advent-calendar/2012/documentation)には， [Org Mode](http://orgmode.org)の[リンク機能](http://orgmode.org/org.html#Hyperlinks)を利用した情報収集に関する[記事](http://qiita.com/items/96629bbcc4a9403f0213)がある．」

内容を展開すると以下のようになる．

>「今年の [[http://qiita.com/advent-calendar/2012/documentation][Adventカレンダー]] には， [[http://orgmode.org][Org Mode]] の [[http://orgmode.org/org.html#Hyperlinks][リンク機能]] を利用した情報収集に関する [[http://qiita.com/items/96629bbcc4a9403f0213][記事]] がある．」

Emacs バッファ上では，リンクにカーソルを載せて`C-c C-o`で開くことができる．また，作成した文書をHTMLに出力すれば，Aタグで囲われたリンクになる．

## エイリアスを用いてリンクを表現する

Org Modeでリンクにできるのは，URLだけではない．ローカルファイルやディレクトリ，別ファイルの特定の行，そして，コマンドの実行すら行える（[[elisp:org-version]]と書いてリンクを開いてみよ）．

### 無駄の多いパス表現

文書をまとめるという点では，端末に保存してあるたくさんのPDFに対するリンクを便利に扱いたいものだ，しかし，そのままリンクを生成するとファイルパスを何度も記述しなければならない．例えば，/home/hoge/Documents/PDF 以下に次のようにPDFを保存されているとする．

> /home/hoge/Documents/PDF/a.pdf
> /home/hoge/Documents/PDF/b/c.pdf

通常の方法で a.pdf にリンクを張るならば，

> 本手法は，fooらの [[/home/hoge/Documents/PDF/a.pdf][手法1]] を用いるよりも効率が良い．

となる．しかし，何度もリンクを記述すると/home/hoge/Documents/PDF が複数回登場して無駄である．

### エイリアスの利用

そこで，上記のファイルパスのエイリアスを設けて記述量を減らす．

バッファの上部に次のような一文を追加し，適用する（カーソルをのせて `C-c C-c`）

> \#+link: doc file+sys:/Users/hoge/Documents/PDF/

そして，上記のリンクを次のようなスタイルで書き換える．

> [[doc:a.pdf][手法1]]
> [[doc:b/c.pdf][手法2]]

見やすくなった．PDFの保存先を変更した場合には，doc として記述したパスを任意に書き換えるだけでよく，パスの変更に柔軟に対応できる．

## その他

### URLの自動配色と日本語

Org Mode では，リンクと判断される文字列は自動で色が変わる．しかし，そのアルゴリズムは前後に空白文字が存在していることを前提としており，日本語のように一文が空白文字が無く記述される場合は，リンクの前後に空白文字が無いため文章の終わりまでリンクであると判定されてしまう．これは，`[`と`]`で括られた明示的なリンクでは問題にならない．

私の場合はこの自動リンク判定をOFFにして利用している．以下のパッチが有効だ．もっと良い方法があると信じている．

```diff
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -5770,7 +5770,7 @@ needs to be inserted at a specific position in the font-lock sequence.")
           ;; Links
           (if (memq 'tag lk) '(org-activate-tags (1 'org-tag prepend)))
           (if (memq 'angle lk) '(org-activate-angle-links (0 'org-link t)))
-          (if (memq 'plain lk) '(org-activate-plain-links))
+;         (if (memq 'plain lk) '(org-activate-plain-links))
           (if (memq 'bracket lk) '(org-activate-bracket-links (0 'org-link t)))
           (if (memq 'radio lk) '(org-activate-target-links (0 'org-link t)))
           (if (memq 'date lk) '(org-activate-dates (0 'org-date t)))
```

### Google翻訳を呼ぶリンクを作る

`org-link-abbrev-alist`を設定することで，エイリアスを生成しつつ高機能なリンクを生成できる．例えば，[マニュアルにも紹介](http://orgmode.org/org.html#Link-abbreviations)されている`url-to-ja`というエイリアスだ．

バッファ内で設定するには，以下を準備すればよい（`C-c C-c`を忘れずに）．

> \#+link: url-to-ja http://translate.google.com/translate?sl=en&tl=ja&u=%h

そしてバッファ中に

> [[url-to-ja:orgmode.org]]

を作りリンクを開けば，Google先生が翻訳したページを閲覧できる．

# まとめ

この記事では Org Mode のリンク機能の運用例を紹介した．このリンク機能をEmacsで利用すると，バッファ間を`C-c C-o`（リンク先へ）と`C−c &`（戻る）で自在に飛ぶことができ，文書同士を簡単に結びつけておくことができる．さらなる詳細は，日本語マニュアル（[PDF](https://github.com/org-mode-doc-ja/org-ja/blob/master/work/org-ja.pdf?raw=true)）を参考にしていただきたい．