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
-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
を押下すると、先ほど記載したBEGIN
とEND
の間に、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-to-html
を使用しましたが、orgtbl-to-csv
やorgtbl-to-latex
などの関数を指定することで別の形式に変換することもできます。orgtbl-to-generic
を使用すると、変換後のテーブルの先頭や末尾、行頭行末の文字などを細かく指定できるので、マイナーな形式のテーブルへの変換などにも柔軟に対応できるのではないかと思いました。
感想:うーん……
変換なんてまわりくどいことをせずに、やはりそのままの形式で編集したいのでコレジャナイ感は否めませんでした。ソースの中にorg-mode形式の表を埋め込むのも現実的ではない気がします。