rst2odt.py 用の stylesheet を作る

まずは Rakefile を作る

先日の準備からサクッと一ヶ月以上経過してようやく作業を開始。まずは作業の流れを整理する。

  1. styles.xml をいじる
  2. styles.xml を含むファイルを styles.odt という名前で zip アーカイブに仕立て直す
  3. styles.odt を –stylesheet に与えて rst2odt.py で reST ファイルから .odt ファイルを生成
  4. できあがった .odt ファイルを(Macなので)open を使って OOo で開く

これを気に入ったスタイルができあがるまで延々くり返す。

同じ作業を延々くり返す…。

Rakefile を書きましょう。

今回は初めてまともに file タスクを作った。これを使うと変更があったときにだけ生成や変換が行われるようになる。task タスクだと毎回愚直に実行される。

cf. Rake

ここまでできた

wtnabe's rst2odt_stylesheet at master - GitHub

この日記を書いている段階で

  • ページを A4 に
  • フォントを IPAex に
    • IPAex は日本語を monospace で欧文を proportional で表現してくれるので細かくフォント指定せずにそのまま書き連ねるのに向いている
  • 日本語では不自然なイタリックを除去
  • 箇条書きの記号を大人しく

できた。

また styles.xml じゃなくて command line argument –table-border-thickness で border-width を設定。

諦めたのは

  • table cell の padding 調整
  • 見出しに prefix を付ける。

辺り。

table の border もそうなんだけど、table-cell への style を指定する方法がないみたい。table-cell は一つ一つに名前が付いて細かく style を指定するから stylesheet としてデフォルトを当てるのは無理っていう設計なのかな。

見出しの prefix はこれは恐らく個人的な要望で、どういうことかというと、見出しって普通文字を大きくしてボールドにして…とかやるんだけど、日本語の「普通の文書」だとこの見出しってあんまり大きくしない方がバランスいいと思う。なんだけど、やっぱちょっと目立ちにくい。そこでいつもやってるのは

行頭にそれっぽい記号を入れる

方法。これで文字サイズを極端に変えずに見出しとしての attention を維持しようという考え。

で、その prefix の挿入を自動でできないかと思ったんだけど、とりあえず CSS の

h1:before {
  content: '■ '
}

みたいなことはできないっぽいので手で入れることにして逃げました。そこにこだわって時間掛けても仕方ない。

あとは地の文だけ(table 内のテキストなどは対象外)にインデントが設定できればほぼ満足かなぁ。

良い副作用

[2010-10-23 追記]

この方法で .odt を作ったら思わぬ副作用があった。できあがったファイルを OOo で開いて PDF にエクスポートするとちゃんとアウトラインを保持した PDF を作ることができる。

当たり前っちゃ当たり前なんだけど、これはなかなか感動的。そんなに長い文章を書くことは多くないけど、やっぱり構造が見やすいのは良い。とても良い。

注意とか疑問まとめ

  • table の border を stylesheet で指定する方法はない。コマンドラインオプションで与える。
  • list の indent は Emacs の rst-mode が正しくサポートできていない。上の階層から 3文字下げるとちゃんとレベルが下がるが、rst-mode は 2文字下げで止まってしまう。
  • indent を含む list の変換が微妙。
* 上のレベル
   * 次のレベル

これは OK

 * 上のレベル
    * 次のレベル

これは NG

違いは行頭の空白。reST では bullet の前に space は置かない方が良いらしい。ただし indent がない場合は行頭に空白があってもなくてもよい。

うーん難しいわ。特に Trac の Wiki と併用していると混乱必死。Trac も基本的に reST で書くようにしちゃえばいいのかなぁ。

関連エントリ

心の叫び

Twitter / wtnabe: table の border は styleshee …

More