読者です 読者をやめる 読者になる 読者になる

type t (* void *)

関数型言語や英語学習の事とか。

Emacs: 構造化文章を楽に書く

構造化文章を書きたいときは多々あると思うのですが、texは書きたくないみたいな事は沢山あると思います。
今回ちょっとorg-modeで構造化文章を書いたのでそのメモを。

EmacsでOrg-modeの書式からhtmlを出力することを考えます。既にorg-modeを使った解説記事は沢山あるので、僕がちょっと手の込んだ文章を書くのに嬉しかった機能のみ絞って紹介します。

数式を書く

ファイルの先頭に#+OPTIONS: LaTeX:tを書くとlatexの数式を書くことができます。

  • $(\lambda x. x) (\lambda x. x) \rightarrow (\lambda x. x) (\lambda x. x)$ のように書くと数式を埋め込むことができます。

  • \begin{equation} \end{equation}の中にlatexの数式をそのまま記述することもできます。

  • 外部のパッケージも使うことができます。例えばamsmathを使いたければ、 #+OPTIONS: Latex:amsmath のようにファイルの先頭に書くことでパッケージをインポートできます。

図表の管理

org-mode の通常の書式[[ラベル名][表示メッセージ]]で図やソースコードを参照できます。

ソースコード

  • ソースコードは1行で書くときは =(defun f nil (princ "hello"))=のようにイコール記号で囲みます
  • 複数行に渡る場合は下のように書きます。#+Nameタグをつけることで、上で示した書式でリンクを晴れます

      #+Name: code: ocaml
      #+begin_src ocaml
      let f x = x
      #+end_src
    
      [[code: ocaml][ocamlのコード]]
    

画像

下のようにして画像を挿入できます。

#+Caption: 実験結果1
#+Name: fig: result
[./image.png]

[[fig: result][メッセージ]]

テキストから作る

ditaa, graphvizなどを用いて図を書くことができます。
うまく行かない場合は、org-ditaa-jar-pathorg-babel-load-languagesでどの言語を使うのかなどを正しく設定する必要があります。

ditaaは、普通に自分でapt-get install ditaaしただけだと日本語の扱いに難があるそうです。

#+Name: fig: graph1
#+begin_src ditta :file images/ditaa.png
+------+-----+   +-----+
| RED  | BLU |   | YEL |
| Foo  + Bar +-->+ Baz +
|      |     |   |     |
+------+-----+   +--+--+
#+end_src

#+Name: fig: graph2
#+begin_src dot :file images/dot.png
digraph sample {
  a [label="Emacs"]
  b [label="elisp"]
  a -> b [label=use]
  }
#+end_src

その他

困ったら#+begin_html#+end_htmlで囲うことでhtmlタグを直で書くことができます。やったね! 例を示そうと思ったのですが、ここのページに何が出来るのか大体まとまっていたのでいいですよね…?

追記: 一応作ったので自分で例を示します。

https://raw.githubusercontent.com/nomaddo/my-org-mode-example/master/example.org

感想

ぱぱっとこれくらい出来れば使える気分です。
org-modeEmacsで最も使いやすいマークアップ言語だと思うので積極的に使って行きたいですね。

リンク

Org-mode による HTML 文書作成入門
org-modeの機能でエキスポートされたhtmlで書かれた解説ページ

Hello Worg, the Org-Mode Community!
org-modeのコミュニティ