27 Apr 2014, 06:18

org-mode で書いたテキストを Pandoc で Restructured Text に変換する

やりたいこと

org-mode で書いたテキストを Restructured Text に変換したい.

Pandoc を利用すると, org-mode の文章を変換することができる.

[sourcecode language=”text” title=””]
入力 (org-mode) -> 変換 (Pandoc) -> 出力 (Restructured Text)
[/sourcecode]

Pandoc をつかう

Pandoc とは, 汎用的なドキュメント変換ツール. ある形式から別の形式へドキュメントの形式を変換できる.

org-mode の writer は以前からあったが, reader は最近ようやく pull request された.

ということで, 最新の Pandoc を試してみる. github からダウンロード.

pandoc は haskell でかかれてるので, ビルドには haskell がひつよう.

以下を順々に実施.

[sourcecode language=”bash” title=””]
$ cabal update
$ cabal install pandoc
$ pandoc -v
pandoc 1.12.3.3
Compiled with texmath 0.6.6.1, highlighting-kate 0.5.6.1.
[/sourcecode]

実験

<div class="outline-text-3" id="text-unnumbered-3">
  <p>
    これがゴール.
  </p>

  <p>
    [sourcecode language=&#8221;text&#8221; title=&#8221;&#8221;]<br /> Hello Sphinx<br /> ============
  </p>

  <p>
    テスト.
  </p>

  <p>
    テスト<br /> ======
  </p>

  <p>
    テストです.<br /> [/sourcecode]
  </p>

  <p>
    これを変換する.
  </p>

  <p>
    [sourcecode language=&#8221;text&#8221; title=&#8221;&#8221;]<br /> * Hello Sphinx
  </p>

  <p>
    テスト.
  </p>

  <p>
    * テスト
  </p>

  <p>
    テストです.<br /> [/sourcecode]
  </p>

  <p>
    変換はコマンドラインから以下を実行
  </p>

  <p>
    [sourcecode language=&#8221;bash&#8221; title=&#8221;&#8221;]<br /> pandoc -f rst hello2.org<br /> [/sourcecode]
  </p>

  <p>
    こうなった.
  </p>

  <p>
    [sourcecode language=&#8221;text&#8221; title=&#8221;&#8221;]<br /> &#8211; Hello Sphinx
  </p>

  <p>
    テスト.
  </p>

  <p>
    &#8211; テスト
  </p>

  <p>
    テストです.<br /> [/sourcecode]
  </p>

  <p>
    箇条がきではなくて, 見出しなのだが. . . 今後に期待ということで.
  </p>
</div>

org-pandoc をつかう

org-pandoc をというツールをつかっても, panodc に対応した色々なフォーマットに変換できる.

仕組みは, 一度 org-mode から markdown に変換して, markdown を pandoc にかけるというもの.

実験

<div class="outline-text-3" id="text-unnumbered-5">
  <p>
    変換には, 以下を評価したあとに, M-x org-pandoc-export-to-pandoc 実 行.
  </p>

  <p>
    [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221;]<br /> (require &#8216;ox-pandoc)<br /> (setq org-pandoc-export-format &#8216;rst)<br /> [/sourcecode]
  </p>

  <p>
    こうなった.
  </p>

  <p>
    [sourcecode language=&#8221;text&#8221; title=&#8221;&#8221;]<br /> ======<br /> hello2<br /> ======
  </p>

  <p>
    :Author: tsu-nera
  </p>

  <p>
    .. raw:: html
  </p>

  <p>
    <div id="table-of-contents"><br /> \<h2\>
  </p>

  <p>
    Table of Contents
  </p>

  <p>
    .. raw:: html
  </p>

  <p>
    \</h2\><br /> <div id="text-table-of-contents"><br /> <ul><br /> <li>
  </p>

  <p>
    1. Hello Sphinx
  </p>

  <p>
    .. raw:: html
  </p>

  <p>
    </li><br /> <li>
  </p>

  <p>
    2. テスト
  </p>

  <p>
    .. raw:: html
  </p>

  <p>
    </li><br /> </ul><br /> </div><br /> </div>
  </p>

  <p>
    Hello Sphinx<br /> ============
  </p>

  <p>
    テスト.
  </p>

  <p>
    テスト<br /> ======
  </p>

  <p>
    テストです.<br /> [/sourcecode]
  </p>

  <p>
    ヘッダによけいなものがたくさんつくものの, default pandoc よりいいな.
  </p>
</div>

org-mode から markdown 経由で reST へ変換する

Markdown から reST への変換は いろいろな人がチャレンジして実績があるので, この道を考える.

org-mode には, デフォルトで markdown 変換コマンドあり. MarkDown どころか, HTML,Pandoc,LATex.. いろいろある.

詳しくは, org-export-dispatch (C-c C-e) を実行.

さっきのゴミは, emacs-export 機能のオプションを利用すれば消せた.

[sourcecode language=”text” title=””]
#+OPTIONS: toc:nil
[/sourcecode]

オプションの詳しい説明は, 以下.

コマンドラインから変換したい

<div class="outline-text-3" id="text-unnumbered-7">
  <p>
    上記の方法は, Emacs のなかで変換処理を行うのだが, 複数ファイルを処理するとするとコマンドラインから変換処理を行いたい.
  </p>

  <p>
    調べたところ, emacs には batch という機能があるようだ.
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://d.hatena.ne.jp/rubikitch/20101107/org2html">org-mode → HTML 変換をする 3 つの方法 &#8211; (rubikitch loves (Emacs Ruby CUI Books))</a>
    </li>
    <li>
      <a href="http://shuzo-kino.hateblo.jp/entry/2014/01/02/012905">CLI で emacs の org-mode を使って html 化する &#8211; Bye Bye Moore</a>
    </li>
    <li>
      <a href="http://www.bookshelf.jp/texi/emacs-20.6-man-jp/emacs_32.html#SEC490">GNU Emacs マニュアル: A. コマンド行引数</a>
    </li>
  </ul>

  <p>
    batch については今回はわからなかったので, 次回に回す. 外部ライブラリまわりで苦戦.
  </p>

  <p>
    [sourcecode language=&#8221;bash&#8221; title=&#8221;&#8221;]<br /> emacs hello.org -f org-md-export-to-markdown<br /> [/sourcecode]
  </p>

  <p>
    とりあえず, なんとなくできるという道が開けた気がした.
  </p>
</div>