5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

org-modeのテーブルをHTMLその他任意の形式に変換する

Last updated at Posted at 2013-10-30

org-modeでテーブルが簡単に書ける機能、便利ですよね。

いったんorg-mode上でテーブルを書くのに慣れてしまうと、もうHTMLやCSVなどの形式でテーブルを書くのが億劫で仕方ありません。あまりに億劫なので、org-mode以外のテーブル形式に対してもorg-modeのテーブルのように楽々編集を行う方法が無いか調べてみました。

orgtbl-modeではHTMLやCSVの表は編集できない

org-mode以外のメジャーモードでもorg-mode同様のテーブルの編集ができるマイナーモードとしてorgtbl-modeがあります。当初はこれをカスタマイズすることで、「tableタグ内の各セルをTABで移動」、「末尾まで到達してタブで次の行を追加」などの操作ができるようになるのでは……と妄想していたのですが、公式のドキュメントによるとしんどいのでやめた方がよい旨のことが書かれていたのであっさり挫折です。

[Tables in arbitrary syntax - The Org Manual](http://orgmode.org/manual/Tables-in-arbitrary-syntax.html#Tables-in![orgtbl.png](https://qiita-image-store.s3.amazonaws.com/0/14347/42113a3f-7e4a-3bc1-7a6c-f9acd4385381.png)
-arbitrary-syntax)

Since Orgtbl mode can be used as a minor mode in arbitrary buffers, a frequent feature request has been to make it work with native tables in specific languages, for example LaTeX. However, this is extremely hard to do in a general way, would lead to a customization nightmare, and would take away much of the simplicity of the Orgtbl mode table editor.

org-mode記法で書いたテーブルを他の形式に変換することはできる

上記のドキュメントの続きを読むと、org-mode形式ではないテーブルをorg-modeのように編集することはできないものの、org-mode形式で書いたテーブルを任意の形式に変換することはできるようなのでそちらを試してみました。

変換機能を利用してorg-modeのテーブルからHTMLのテーブルをつくる

以下では、org-mode形式で書いたテーブルをHTMLのテーブルに変換した際の手順を記載します。

HTMLの中にコメントとしてorg-mode形式のテーブルを書く

orgtbl-modeを使用してHTMLの中にorg-mode形式のテーブルを書きます。このままブラウザに表示されては困るのでHTMLのコメント内に記載するのがよいでしょう。orgtbl-to-htmlはテーブル書式の変換に使う関数名です。

<!--
# +ORGTBL: SEND my-table orgtbl-to-html
|     a |     b |    c |
|-------+-------+------|
| 11111 | 22222 | 3333 |
| 11111 | 22222 | 3333 |
-->

変換後のテーブルを挿入する箇所を指定する

変換後のテーブルを挿入したい箇所に以下の記述を追加します。my-tableの部分は、先ほどの手順でSENDのところに記載した値と一致する必要があります。

<!-- BEGIN RECEIVE ORGTBL my-table -->
<!-- END RECEIVE ORGTBL my-table -->

変換する

org-mode形式のテーブル上にカーソルを移動しC-c C-cを押下すると、先ほど記載したBEGINENDの間に、HTMLのタグに変換されたテーブルが挿入されます。

<!--
# +ORGTBL: SEND my-table orgtbl-to-html
|     a |     b |    c |
|-------+-------+------|
| 11111 | 22222 | 3333 |
| 11111 | 22222 | 3333 |
-->

<!-- BEGIN RECEIVE ORGTBL my-table -->
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup><col class="right" /><col class="right" /><col class="right" />
</colgroup>
<thead>
<tr><th scope="col" class="right">a</th><th scope="col" class="right">b</th><th scope="col" class="right">c</th></tr>
</thead>
<tbody>
<tr><td class="right">11111</td><td class="right">22222</td><td class="right">3333</td></tr>
<tr><td class="right">11111</td><td class="right">22222</td><td class="right">3333</td></tr>
</tbody>
</table>
<!-- END RECEIVE ORGTBL my-table -->

こんな感じの表ができます。
orgtbl.png

変換形式のカスタマイズ

今回はテーブルの変換関数としてorgtbl-to-htmlを使用しましたが、orgtbl-to-csvorgtbl-to-latexなどの関数を指定することで別の形式に変換することもできます。orgtbl-to-genericを使用すると、変換後のテーブルの先頭や末尾、行頭行末の文字などを細かく指定できるので、マイナーな形式のテーブルへの変換などにも柔軟に対応できるのではないかと思いました。

感想:うーん……

変換なんてまわりくどいことをせずに、やはりそのままの形式で編集したいのでコレジャナイ感は否めませんでした。ソースの中にorg-mode形式の表を埋め込むのも現実的ではない気がします。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?