T.I.D.

Git や GitHub と戯れる、オレオレ的おとなの遊び場

Octopressで見出しの目次を記事に埋め込む方法

GitHub Pagesjekyll が 0.12.0 にバージョンアップした事に伴い、 rdiscount目次作成機能(Table Of Contents) が効くようになった。

これを Octopress でも試してみた。

目次

作成方法

設定

_config.yml に以下を追加。

_config.yml に RDiscount の設定を追加
1
2
3
rdiscount:
  extensions: ['generate_toc']
  toc_token: "{:TOC}"

記事の書き方

記事に {:TOC} を書き込むと、その部分が目次に置き換わる(TOCTable Of Contents の略)。

記事に目次を埋め込む
1
2
### 目次
{:TOC}

日本語の見出し

見出しに日本語を使うと、generate 時にエラーが出る。

Liquid Exception: incompatible character encodings: UTF-8 and ASCII-8BIT in atom.xml

この問題は、Issue #555 で報告されている。このパッチ の通り、 gems/jekyll-0.12.0/lib/jekyll/converters/markdown.rb を対策する。

lib/jekyll/converters/markdown.rb
1
2
3
4
5
6
7
8
9
@@ -120,7 +120,7 @@ def convert(content)
           rd = RDiscount.new(content, *@rdiscount_extensions)
           html = rd.to_html
           if rd.generate_toc and html.include?(@config['rdiscount']['toc_token'])
-            html.gsub!(@config['rdiscount']['toc_token'], rd.toc_content)
+            html.gsub!(@config['rdiscount']['toc_token'], rd.toc_content.force_encoding('utf-8'))
           end
           html
         when 'maruku'

ただし force_encoding('utf-8') が気に入られず、取り込まれていない。

Comments