杰奇的内容自动表(Jekyll automatic table of contents)

2019-08-03 00:30发布

我已经建立基于该网站的哲基尔代码网站的Apache Buildr 。 该Buildr网站自动生成表的内容为基于标题每个页面textile格式的文件。

例如,您在使用纺织标示出像这样的标题写的页面。 。

h2(#why).  Why are we doing this?

BLah blah balh etc ..


h2(#something). Some other header

BLah blah balh etc ..

然后,在默认的HTML你有一些代码,管道中的内容转换成一种叫toc ,然后你把内容之后。 例如 ...

<div id='content'>
 <h1 id='{{ page.title | downcase | replace(' ', '_') }}'>{{ page.title }}</h1>
  {{ content | toc }}
  {{ content }}
</div>

关于Apache的网站,他们得到想要的结果(TOC被显示为后面的内容)。 然而,在我的网站,内容物被两次。 生成的内容概不表。

此外,如果我直接从GitHub克隆了Apache Buildr项目并运行jekyll --serverdoc该项目的文件夹,然后要么不产生表的内容。

我在想什么?

Answer 1:

我通过电子邮件发送的Buildr开发者邮件列表,有人告诉我, 在这里寻找灵感。 原来,相关的代码段...

module TocFilter
  def toc(input)
    output = "<ol class=\"toc\">"
    input.scan(/<(h2)(?:>|\s+(.*?)>)([^<]*)<\/\1\s*>/mi).each do |entry|
      id = (entry[1][/^id=(['"])(.*)\1$/, 2] rescue nil)
      title = entry[2].gsub(/<(\w*).*?>(.*?)<\/\1\s*>/m, '\2').strip
      if id
        output << %{<li><a href="##{id}">#{title}</a></li>}
      else
        output << %{<li>#{title}</li>}
      end
    end
    output << '</ol>'
    output
  end
end
Liquid::Template.register_filter(TocFilter)

做一个文件夹中的网站叫的源文件夹_plugins然后将此代码粘贴到一个名为TocFilter.rb该文件夹中。

有用!!



Answer 2:

凡TOC定义? 它不列为标准液体过滤器或扩展杰基尔的一个,所以可能你缺少一个插件。



Answer 3:

我用ghiculescu的JS TOC我的哲基尔供电Github的博客。 它工作得很好。

实例 。



Answer 4:

jekyll-toc插件可以实现这个要求开箱。

以下添加到您GemFile

gem 'jekyll-toc'

以下添加到您的_config.yml

plugins:
  - jekyll-toc

添加要在其中生成TOC以下液体标签。

{{ content | toc_only }}

最后设置toc: true在您的文章的front-matter

我在加入这个值作为默认_config.yml使TOC应用到我的所有文章默认。



文章来源: Jekyll automatic table of contents